git.iko.soy/typeable/servant
on master help sign in
first getting-started example
2b23253Alp Mestanogullari
servant-examples/getting-started/GS1.hsnew file+45
@@ -0,0 +1,45 @@
1+{-# LANGUAGE DataKinds #-}
2+{-# LANGUAGE TypeFamilies #-}
3+{-# LANGUAGE DeriveGeneric #-}
4+{-# LANGUAGE TypeOperators #-}
5+
6+import Data.Aeson
7+import Data.Time.Calendar
8+import GHC.Generics
9+import Network.Wai.Handler.Warp (run)
10+import Servant
11+
12+data User = User
13+ { name :: String
14+ , age :: Int
15+ , email :: String
16+ , registration_date :: Day
17+ } deriving (Eq, Show, Generic)
18+
19+-- orphan ToJSON instance for Day. necessary to derive one for User
20+instance ToJSON Day where
21+ -- display a day in YYYY-mm-dd format
22+ toJSON d = toJSON (showGregorian d)
23+
24+instance ToJSON User
25+
26+type UserAPI = "users" :> Get '[JSON] [User]
27+
28+users :: [User]
29+users =
30+ [ User "Isaac Newton" 372 "isaac@newton.co.uk" (fromGregorian 1683 3 1)
31+ , User "Albert Einstein" 136 "ae@mc2.org" (fromGregorian 1905 12 1)
32+ ]
33+
34+userAPI :: Proxy UserAPI
35+userAPI = Proxy
36+
37+server :: Server UserAPI
38+server = return users
39+
40+runServer :: Int -> IO ()
41+runServer port = run port (serve userAPI server)
42+
43+main :: IO ()
44+main = runServer 8081
45+
servant-examples/servant-examples.cabal+13
@@ -13,6 +13,19 @@ category: Web
13build-type: Simple
13build-type: Simple
14cabal-version: >=1.10
14cabal-version: >=1.10
15
15
16+executable getting-started-1
17+ main-is: GS1.hs
18+ build-depends:
19+ aeson >= 0.8
20+ , base >= 4.7
21+ , either
22+ , servant
23+ , servant-server
24+ , time
25+ , warp
26+ hs-source-dirs: getting-started
27+ default-language: Haskell2010
28+
16executable hackage
29executable hackage
17 main-is: hackage.hs
30 main-is: hackage.hs
18 build-depends:
31 build-depends: