Search code examples
mysqlhaskellhaskell-snap-framework

Snap web application connect with MySQL


I've been working with Haskell in the last few days. I created a small web app using Haskell and Snap. I added an HTML form to get user data and configured a mysql db with Haskell. I can retrieve data using Haskell. I want to know how I can insert user input into the database.

echo :: Application ()
echo = do      
  firstName <- decodedParam "firstname" 
  heistLocal (bindSplices echoSplices) $ render "echo"
  where   
    decodedParam p = fromMaybe "" <$> getParam p    

The following is how I made the database connection in my web application. Now I want to connect these two functions, but I cannot use sqlExe within echo, so how can insert data into the db. What point is missing here??

sqlExe :: IO [[SqlValue]]
sqlExe =
  do conn <- connectMySQL defaultMySQLConnectInfo {
                  mysqlHost = "localhost",
                  mysqlDatabase = "test",
                  mysqlUser = "root",
                  mysqlPassword = "password",
                  mysqlUnixSocket = "/var/lib/mysql/mysql.sock" }               
     quickQuery conn "select* from Test" []

I really appreciate if someone can help me to get out of this problem.


Solution

  • Application is an instance of MonadIO, so you can call sqlExe from within echo like this:

    result <- liftIO sqlExe