{-# LANGUAGE TemplateHaskell, QuasiQuotes, OverloadedStrings #-} {-# 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 $ ("Received the key" ++ (show s)) key <- mkKey "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 ()