{-# LANGUAGE DataKinds, TypeOperators #-} import Control.Concurrent import Network.HTTP.Client hiding (Proxy) import Network.Wai.Handler.Warp import Nix import Servant import Servant.Client import Servant.Nix -- returns Nix expressions received as input type IdAPI = ReqBody '[Nix] NExpr :> Post '[Nix] NExpr api :: Proxy IdAPI api = Proxy server :: Server IdAPI server = pure postExpr :: NExpr -> ClientM NExpr postExpr = client api main :: IO () main = do mgr <- newManager defaultManagerSettings tid <- forkIO $ run 8080 (serve api server) threadDelay 500000 runClientM (postExpr testExpr) (env mgr) >>= \res -> do killThread tid case res of Left err -> error $ "Problem: " ++ show err Right expr -> putStrLn "Roundtrip successful!" >> print expr where testExpr = mkList [ mkInt n | n <- [1..10] ] env m = ClientEnv m url Nothing url = BaseUrl Http "localhost" 8080 ""