on 404bfdd help sign in
49 lines 1.1 kB history raw
1{-# LANGUAGE DataKinds #-}
2{-# LANGUAGE TypeFamilies #-}
3{-# LANGUAGE DeriveGeneric #-}
4{-# LANGUAGE TypeOperators #-}
5module T2 where
7import Data.Aeson
8import Data.Time.Calendar
9import GHC.Generics
10import Network.Wai
11import Servant
13data User = User
14 { name :: String
15 , age :: Int
16 , email :: String
17 , registration_date :: Day
18 } deriving (Eq, Show, Generic)
20-- orphan ToJSON instance for Day. necessary to derive one for User
21instance ToJSON Day where
22 -- display a day in YYYY-mm-dd format
23 toJSON d = toJSON (showGregorian d)
25instance ToJSON User
27type UserAPI = "users" :> Get '[JSON] [User]
28 :<|> "albert" :> Get '[JSON] User
29 :<|> "isaac" :> Get '[JSON] User
31isaac :: User
32isaac = User "Isaac Newton" 372 "isaac@newton.co.uk" (fromGregorian 1683 3 1)
34albert :: User
35albert = User "Albert Einstein" 136 "ae@mc2.org" (fromGregorian 1905 12 1)
37users :: [User]
38users = [isaac, albert]
40userAPI :: Proxy UserAPI
41userAPI = Proxy
43server :: Server UserAPI
44server = return users
45 :<|> return albert
46 :<|> return isaac
48app :: Application
49app = serve userAPI server