summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/src/Minilang
diff options
context:
space:
mode:
Diffstat (limited to 'lambda-calcul/haskell/src/Minilang')
-rw-r--r--lambda-calcul/haskell/src/Minilang/Server.hs14
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 =