2015-08-17 23:56:29 +02:00
|
|
|
{-# LANGUAGE DataKinds #-}
|
2015-05-05 21:50:24 +02:00
|
|
|
{-# LANGUAGE DeriveGeneric #-}
|
2015-08-17 23:56:29 +02:00
|
|
|
{-# LANGUAGE TypeFamilies #-}
|
2015-05-05 21:50:24 +02:00
|
|
|
{-# LANGUAGE TypeOperators #-}
|
2015-05-10 13:39:18 +02:00
|
|
|
module T2 where
|
2015-05-05 21:50:24 +02:00
|
|
|
|
2015-08-17 23:56:29 +02:00
|
|
|
import Data.Aeson
|
|
|
|
import Data.Time.Calendar
|
|
|
|
import GHC.Generics
|
|
|
|
import Network.Wai
|
|
|
|
import Servant
|
2015-05-05 21:50:24 +02:00
|
|
|
|
|
|
|
data User = User
|
2015-08-17 23:56:29 +02:00
|
|
|
{ name :: String
|
|
|
|
, age :: Int
|
|
|
|
, email :: String
|
2015-05-05 21:50:24 +02:00
|
|
|
, registration_date :: Day
|
|
|
|
} deriving (Eq, Show, Generic)
|
|
|
|
|
|
|
|
-- orphan ToJSON instance for Day. necessary to derive one for User
|
|
|
|
instance ToJSON Day where
|
|
|
|
-- display a day in YYYY-mm-dd format
|
|
|
|
toJSON d = toJSON (showGregorian d)
|
|
|
|
|
|
|
|
instance ToJSON User
|
|
|
|
|
|
|
|
type UserAPI = "users" :> Get '[JSON] [User]
|
|
|
|
:<|> "albert" :> Get '[JSON] User
|
|
|
|
:<|> "isaac" :> Get '[JSON] User
|
|
|
|
|
|
|
|
isaac :: User
|
|
|
|
isaac = User "Isaac Newton" 372 "isaac@newton.co.uk" (fromGregorian 1683 3 1)
|
|
|
|
|
|
|
|
albert :: User
|
|
|
|
albert = User "Albert Einstein" 136 "ae@mc2.org" (fromGregorian 1905 12 1)
|
|
|
|
|
|
|
|
users :: [User]
|
|
|
|
users = [isaac, albert]
|
|
|
|
|
|
|
|
userAPI :: Proxy UserAPI
|
|
|
|
userAPI = Proxy
|
|
|
|
|
|
|
|
server :: Server UserAPI
|
|
|
|
server = return users
|
|
|
|
:<|> return albert
|
|
|
|
:<|> return isaac
|
|
|
|
|
|
|
|
app :: Application
|
|
|
|
app = serve userAPI server
|