{-# LANGUAGE TemplateHaskell, QuasiQuotes #-}
{-# LANGUAGE TypeFamilies, EmptyDataDecls, GADTs #-}
{-# LANGUAGE TypeSynonymInstances, MultiParamTypeClasses, GeneralizedNewtypeDeriving #-}
module Main where
import qualified Database.Redis as R
import Database.Persist
import Database.Persist.Redis
import Database.Persist.TH
import Language.Haskell.TH.Syntax
import Control.Monad.IO.Class (liftIO)
import Data.Text (Text, pack, unpack)
let redisSettings = mkPersistSettings (ConT ''RedisBackend)
in share [mkPersist redisSettings] [persistLowerCase|
Person
name String
age Int
deriving Show
|]
d :: R.ConnectInfo
d = R.defaultConnectInfo
host :: Text
host = pack $ R.connectHost d
redisConf :: RedisConf
redisConf = RedisConf host (R.connectPort d) Nothing 10
mkKey :: (Monad m, PersistEntity val) => Text -> m (Key val)
mkKey s = case keyFromValues [PersistText s] of
Right z -> return z
Left a -> fail (unpack a)
main :: IO ()
main =
withRedisConn redisConf $ runRedisPool $ do
_ <- liftIO $ print "Inserting..."
s <- insert $ Person "Test" 12
_ <- liftIO $ print ("Received the key" ++ show s)
key <- mkKey (pack "person_test")
insertKey key $ Person "Test2" 45
repsert s (Person "Test3" 55)
g <- get key :: RedisT IO (Maybe Person)
liftIO $ print g
delete s
return ()