summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2026-09-13 11:20:00 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2026-09-18 20:56:28 +0200
commita6247056a63d52b2253c4c88a0c9b988aaa4ebcd (patch)
treeb33d0f2ff08c161cd14d108aaac917b744437994
parent3563bcc574489f26cfe5c8b400c3f8f00f5ae6f1 (diff)
Replace IO-based fail with custom MonadFail instance for Eval
-rw-r--r--src/Eval.hs13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/Eval.hs b/src/Eval.hs
index bd011cb..9d83758 100644
--- a/src/Eval.hs
+++ b/src/Eval.hs
@@ -48,10 +48,19 @@ textEvalError :: EvalError -> Text
textEvalError (OtherEvalError text) = text
-type Eval a = ReaderT EvalInput (ExceptT EvalError IO) a
+newtype Eval a = Eval (ReaderT EvalInput (ExceptT EvalError IO) a)
+ deriving
+ ( Functor, Applicative, Monad
+ , MonadReader EvalInput
+ , MonadError EvalError
+ , MonadIO
+ )
+
+instance MonadFail Eval where
+ fail = throwError . OtherEvalError . T.pack
runEval :: Eval a -> EvalInput -> IO (Either EvalError a)
-runEval action einput = runExceptT $ flip runReaderT einput action
+runEval (Eval action) einput = runExceptT $ flip runReaderT einput action
eval :: forall ctx a. ctx -> Expr ctx a -> Eval a