@@ -0,0 +1,51 @@
1+{-# LANGUAGE DataKinds #-}
2+{-# LANGUAGE DeriveGeneric #-}
3+{-# LANGUAGE OverloadedStrings #-}
8+import Network.Wai.Handler.Warp
9+import Network.Wai.Middleware.RequestLogger
12+data Product = Product
15+ , current_price_eur :: Double
17+ } deriving (Eq, Show, Generic)
19+instance ToJSON Product
24+ where p1 = Product "Haskell laptop sticker"
29+ p2 = Product "Foldable USB drive"
34+type SimpleAPI = Get '[JSON] [Product]
36+simpleAPI :: Proxy SimpleAPI
39+server :: Server SimpleAPI
40+server = return products
42+-- logStdout :: Middleware
43+-- i.e, logStdout :: Application -> Application
44+-- serve :: Proxy api -> Server api -> Application
45+-- so applying a middleware is really as simple as
46+-- applying a function to the result of 'serve'
48+app = logStdout (serve simpleAPI server)