diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2026-09-13 11:20:00 +0200 |
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2026-09-18 20:56:28 +0200 |
| commit | a6247056a63d52b2253c4c88a0c9b988aaa4ebcd (patch) | |
| tree | b33d0f2ff08c161cd14d108aaac917b744437994 /src/Eval.hs | |
| parent | 3563bcc574489f26cfe5c8b400c3f8f00f5ae6f1 (diff) | |
Replace IO-based fail with custom MonadFail instance for Eval
Diffstat (limited to 'src/Eval.hs')
| -rw-r--r-- | src/Eval.hs | 13 |
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 |