on master help sign in
examples: add GS4
e81ac8fAlp Mestanogullari
servant-examples/getting-started/GS4.hsnew file+63
@@ -0,0 +1,63 @@
1+{-# LANGUAGE DataKinds #-}
2+{-# LANGUAGE TypeFamilies #-}
3+{-# LANGUAGE DeriveGeneric #-}
4+{-# LANGUAGE TypeOperators #-}
5+{-# LANGUAGE FlexibleInstances #-}
6+{-# LANGUAGE OverloadedStrings #-}
7+module GS4 where
8+
9+import Data.Aeson
10+import Data.Foldable (foldMap)
11+import GHC.Generics
12+import Lucid
13+import Network.Wai
14+import Servant
15+import Servant.HTML.Lucid
16+
17+data Person = Person
18+ { firstName :: String
19+ , lastName :: String
20+ , age :: Int
21+ } deriving Generic -- for the JSON instance
22+
23+-- JSON serialization
24+instance ToJSON Person
25+
26+-- HTML serialization of a single person
27+instance ToHtml Person where
28+ toHtml p =
29+ tr_ $ do
30+ td_ (toHtml $ firstName p)
31+ td_ (toHtml $ lastName p)
32+ td_ (toHtml . show $ age p)
33+
34+ toHtmlRaw = toHtml
35+
36+-- HTML serialization of a list of persons
37+instance ToHtml [Person] where
38+ toHtml persons = table_ $ do
39+ tr_ $ do
40+ td_ "first name"
41+ td_ "last name"
42+ td_ "age"
43+
44+ foldMap toHtml persons
45+
46+ toHtmlRaw = toHtml
47+
48+persons :: [Person]
49+persons =
50+ [ Person "Isaac" "Newton" 372
51+ , Person "Albert" "Einstein" 136
52+ ]
53+
54+type PersonAPI = "persons" :> Get '[JSON, HTML] [Person]
55+
56+personAPI :: Proxy PersonAPI
57+personAPI = Proxy
58+
59+server :: Server PersonAPI
60+server = return persons
61+
62+app :: Application
63+app = serve personAPI server
servant-examples/getting-started/getting-started.hs+2
@@ -5,12 +5,14 @@ import System.Environment
5import qualified GS1
5import qualified GS1
6import qualified GS2
6import qualified GS2
7import qualified GS3
7import qualified GS3
8+import qualified GS4
8
9
9app :: String -> Maybe Application
10app :: String -> Maybe Application
10app n = case n of
11app n = case n of
11 "1" -> Just GS1.app
12 "1" -> Just GS1.app
12 "2" -> Just GS2.app
13 "2" -> Just GS2.app
13 "3" -> Just GS3.app
14 "3" -> Just GS3.app
15+ "4" -> Just GS4.app
14 _ -> Nothing
16 _ -> Nothing
15
17
16main :: IO ()
18main :: IO ()
servant-examples/servant-examples.cabal+2
@@ -20,7 +20,9 @@ executable getting-started
20 aeson >= 0.8
20 aeson >= 0.8
21 , base >= 4.7
21 , base >= 4.7
22 , either
22 , either
23+ , lucid
23 , servant
24 , servant
25+ , servant-lucid
24 , servant-server
26 , servant-server
25 , time
27 , time
26 , wai
28 , wai