34 lines
793 B
Haskell
34 lines
793 B
Haskell
|
{-# LANGUAGE DataKinds #-}
|
||
|
{-# LANGUAGE TypeFamilies #-}
|
||
|
{-# LANGUAGE TypeOperators #-}
|
||
|
module GS7 where
|
||
|
|
||
|
import Control.Monad.Trans.Either
|
||
|
import Control.Monad.Trans.Reader
|
||
|
import Network.Wai
|
||
|
import Servant
|
||
|
|
||
|
type ReaderAPI = "a" :> Get '[JSON] Int
|
||
|
:<|> "b" :> Get '[JSON] String
|
||
|
|
||
|
readerAPI :: Proxy ReaderAPI
|
||
|
readerAPI = Proxy
|
||
|
|
||
|
readerServerT :: ServerT ReaderAPI (Reader String)
|
||
|
readerServerT = a :<|> b
|
||
|
|
||
|
where a :: Reader String Int
|
||
|
a = return 1797
|
||
|
|
||
|
b :: Reader String String
|
||
|
b = ask
|
||
|
|
||
|
readerServer :: Server ReaderAPI
|
||
|
readerServer = enter readerToEither readerServerT
|
||
|
|
||
|
where readerToEither :: Reader String :~> EitherT ServantErr IO
|
||
|
readerToEither = Nat $ \r -> return (runReader r "hi")
|
||
|
|
||
|
app :: Application
|
||
|
app = serve readerAPI readerServer
|