Guest User

Untitled

a guest
Dec 21st, 2018
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.62 KB | None | 0 0
  1. {-# LANGUAGE OverloadedStrings #-}
  2. {-# LANGUAGE QuasiQuotes #-}
  3.  
  4. module Main where
  5.  
  6. import Data.Functor.Contravariant (contramap)
  7. import Data.Int (Int64)
  8. import Data.Text (Text)
  9. import qualified Hasql.Decoders as Decoders
  10. import Hasql.Decoders (Row)
  11. import qualified Hasql.Encoders as Encoders
  12. import Hasql.Encoders (Params, Value)
  13. import Hasql.Statement (Statement(Statement))
  14. import qualified Hasql.Statement as Hasql
  15. import Prelude hiding (id)
  16. import Text.RawString.QQ (r)
  17.  
  18. data User = User
  19. { id :: Int
  20. , password :: Text
  21. , email :: Text
  22. , username :: Text
  23. , bio :: Text
  24. , image :: Maybe Text
  25. }
  26.  
  27. userParams :: Params User
  28. userParams =
  29. contramap (fromIntegral . id) (Encoders.param Encoders.int8) <>
  30. contramap password (Encoders.param Encoders.text) <>
  31. contramap email (Encoders.param Encoders.text) <>
  32. contramap username (Encoders.param Encoders.text) <>
  33. contramap bio (Encoders.param Encoders.text) <>
  34. contramap image (Encoders.nullableParam Encoders.text)
  35.  
  36. userRow :: Row User
  37. userRow =
  38. User
  39. <$> (fromIntegral <$> Decoders.column Decoders.int8)
  40. <*> Decoders.column Decoders.text
  41. <*> Decoders.column Decoders.text
  42. <*> Decoders.column Decoders.text
  43. <*> Decoders.column Decoders.text
  44. <*> Decoders.nullableColumn Decoders.text
  45.  
  46. selectAllUsers :: Statement () [User]
  47. selectAllUsers = Statement sql encoder decoder True
  48. where
  49. sql =
  50. [r|
  51. select
  52. id,
  53. password,
  54. email,
  55. username,
  56. bio,
  57. image
  58. from users
  59. |]
  60. encoder = Encoders.unit
  61. decoder = Decoders.rowList userRow
  62.  
  63. main :: IO ()
  64. main = putStrLn "Hello, Haskell!"
Add Comment
Please, Sign In to add comment