Skip to content

Latest commit

 

History

History
86 lines (73 loc) · 1.74 KB

mongodb-example.md

File metadata and controls

86 lines (73 loc) · 1.74 KB

MongoDB Sample code with persistent

#!/usr/bin/env stack
{- stack
     --resolver lts-6.19
     --install-ghc
     runghc
     --package persistent
     --package persistent-mongoDB
     --package persistent-template
     --package network
     --package mtl
-}

{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TypeFamilies #-}

import Database.Persist
import Database.Persist.TH
import Database.Persist.MongoDB
import Control.Monad.Cont
import MongoImport
import Network (PortID(PortNumber))
import Language.Haskell.TH (Type(..))

share
    [mkPersist mongoSettings]
    [persistLowerCase|
User
    name String
    age Int Maybe
    deriving Show
Blogpost
    title String
    uid UserId
    UniqueUser uid
    deriving Show
|]

main :: IO ()
main =
    withMongoDBConn
        "myDatabaseName"
        "localhost"
        (PortNumber 27017)
        Nothing
        2000
        (runMongoDBPool
             master
             (do user <- insert $ User "John Doe" $ Just 35
                 liftIO $ print user
                 return ()))

You also have to have the MongoImport.hs modul along with it:

{-# LANGUAGE TemplateHaskell #-}

module MongoImport where

import Language.Haskell.TH (Type(..))
import Database.Persist.TH
import Database.Persist.MongoDB

mongoSettings =
    (mkPersistSettings (ConT ''MongoContext))
    { mpsGeneric = False
    }

Execution demo:

sibi::jane { ~/scripts }-> ./mongodb.hs
UserKey {unUserKey = MongoKey {unMongoKey = 5801bde35844a10b1f000000}}