diff options
Diffstat (limited to 'lambda-calcul/haskell/src/Minilang')
| -rw-r--r-- | lambda-calcul/haskell/src/Minilang/Server.hs | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/lambda-calcul/haskell/src/Minilang/Server.hs b/lambda-calcul/haskell/src/Minilang/Server.hs index ea66e1e..7cf5718 100644 --- a/lambda-calcul/haskell/src/Minilang/Server.hs +++ b/lambda-calcul/haskell/src/Minilang/Server.hs @@ -13,7 +13,7 @@ import Data.Aeson decode, eitherDecodeFileStrict, object, - (.=), + (.=), eitherDecode, ) import Data.ByteString.Lazy (fromStrict) import Data.Data (Proxy (..)) @@ -31,6 +31,8 @@ import Servant (hoistServer) import Servant.Server (serve) import System.Log.FastLogger (fromLogStr) import System.Random (newStdGen) +import Control.Exception (try) +import qualified Data.ByteString.Lazy as LBS data Server = Server { -- | If the server is running, this will contain the underlying @@ -71,9 +73,13 @@ startServer serverPort = do readChallenges :: IO [Challenge] readChallenges = do - eitherDecodeFileStrict "challenges.json" >>= \case - Right challenges -> pure challenges - Left _ -> pure defaultChallenges + file <- try $ LBS.readFile "challenges.json" + case file of + Left (_ :: IOError) -> pure defaultChallenges + Right content -> case eitherDecode content of + Right challenges -> pure challenges + Left _ -> pure defaultChallenges + serveAPI :: Env -> Application serveAPI env = |
