Skip to content

Instantly share code, notes, and snippets.

@krdlab
Created June 11, 2012 17:29
Show Gist options
  • Save krdlab/2911454 to your computer and use it in GitHub Desktop.
Save krdlab/2911454 to your computer and use it in GitHub Desktop.
practice: Database.Persist
{-# LANGUAGE QuasiQuotes, TemplateHaskell, TypeFamilies, OverloadedStrings #-}
{-# LANGUAGE GADTs, FlexibleContexts #-}
import Database.Persist
import Database.Persist.MySQL
import Database.Persist.TH
import Control.Monad.IO.Class (liftIO)
import Data.Conduit
import qualified Data.Conduit.List as CL
import Data.ByteString (ByteString)
import qualified Data.ByteString as BS
import Data.ByteString.Char8 as BC (pack)
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persist|
Person
name String
age Int Maybe
deriving Show
|]
main :: IO ()
main = withMySQLConn defaultConnectInfo $ runSqlConn $ do
runMigration migrateAll
insert $ Person "AAA" $ Just 35
insert $ Person "BBB" $ Just 20
insert $ Person "CCC" $ Just 40
runResourceT $ do
selectSource [] [Asc PersonAge, LimitTo 10] $$ showEntity
showEntity :: Sink (Entity Person) (ResourceT (SqlPersist IO)) ()
showEntity = do
entity <- CL.head
case entity of
Just p -> do
liftIO $ BS.putStrLn . BC.pack . show $ p
showEntity
Nothing -> return ()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment