@@ -0,0 +1,37 @@
1+{-# LANGUAGE DataKinds #-}
2+{-# LANGUAGE TypeFamilies #-}
3+{-# LANGUAGE DeriveGeneric #-}
4+{-# LANGUAGE TypeOperators #-}
5+{-# LANGUAGE OverloadedStrings #-}
8+import Control.Monad.IO.Class
9+import Control.Monad.Trans.Either
14+import System.Directory
16+type IOAPI = "myfile.txt" :> Get '[JSON] FileContent
21+newtype FileContent = FileContent
22+ { content :: String }
25+instance ToJSON FileContent
27+server :: Server IOAPI
29+ exists <- liftIO (doesFileExist "myfile.txt")
31+ then liftIO (readFile "myfile.txt") >>= return . FileContent
32+ else left custom404Err
34+ where custom404Err = err404 { errBody = "myfile.txt just isn't there, please leave this server alone." }
37+app = serve ioAPI server