Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {-# LANGUAGE OverloadedStrings #-}
- {-# LANGUAGE QuasiQuotes #-}
- module Main where
- import Data.Functor.Contravariant (contramap)
- import Data.Int (Int64)
- import Data.Text (Text)
- import qualified Hasql.Decoders as Decoders
- import Hasql.Decoders (Row)
- import qualified Hasql.Encoders as Encoders
- import Hasql.Encoders (Params, Value)
- import Hasql.Statement (Statement(Statement))
- import qualified Hasql.Statement as Hasql
- import Prelude hiding (id)
- import Text.RawString.QQ (r)
- data User = User
- { id :: Int
- , password :: Text
- , email :: Text
- , username :: Text
- , bio :: Text
- , image :: Maybe Text
- }
- userParams :: Params User
- userParams =
- contramap (fromIntegral . id) (Encoders.param Encoders.int8) <>
- contramap password (Encoders.param Encoders.text) <>
- contramap email (Encoders.param Encoders.text) <>
- contramap username (Encoders.param Encoders.text) <>
- contramap bio (Encoders.param Encoders.text) <>
- contramap image (Encoders.nullableParam Encoders.text)
- userRow :: Row User
- userRow =
- User
- <$> (fromIntegral <$> Decoders.column Decoders.int8)
- <*> Decoders.column Decoders.text
- <*> Decoders.column Decoders.text
- <*> Decoders.column Decoders.text
- <*> Decoders.column Decoders.text
- <*> Decoders.nullableColumn Decoders.text
- selectAllUsers :: Statement () [User]
- selectAllUsers = Statement sql encoder decoder True
- where
- sql =
- [r|
- select
- id,
- password,
- email,
- username,
- bio,
- image
- from users
- |]
- encoder = Encoders.unit
- decoder = Decoders.rowList userRow
- main :: IO ()
- main = putStrLn "Hello, Haskell!"
Add Comment
Please, Sign In to add comment