The following example uses the default MySQL connection settings:
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Snap
import Snap.Snaplet
import Snap.Snaplet.Heist
import Snap.Snaplet.MysqlSimple
import Control.Lens.TH
import Data.Int
import Data.Maybe
import qualified Data.Text as T
data App = App
{ _heist :: Snaplet (Heist App)
, _db :: Snaplet Mysql
}
makeLenses ''App
instance HasHeist App where
heistLens = subSnaplet heist
main :: IO ()
main = serveSnaplet defaultConfig appInit
appInit :: SnapletInit App App
appInit = makeSnaplet "myapp" "Some application" Nothing $ do
h <- nestSnaplet "heist" heist $ heistInit "templates"
d <- nestSnaplet "db" db mysqlInit
addRoutes [ ("/", defaultHandler), ("", heistServe) ]
return $ App h d
defaultHandler :: Handler App App ()
defaultHandler = do
ns <- q
forM_ ns $ \ (Only i) ->
writeText $ T.concat [ "id = ", T.pack (show i), "\n"]
q :: Handler App App [Only Int64]
q = with db $ query_ ("select id from sometable")