{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ExtendedDefaultRules #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
module Knit.Report.Error
(
knitError
, knitMaybe
, knitEither
, knitMapError
)
where
import qualified Knit.Report.EffectStack as K
import qualified Text.Pandoc.Error as PA
import Knit.Effect.PandocMonad ( textToPandocText )
import qualified Data.Text as T
import qualified Polysemy as P
import qualified Polysemy.Error as PE
knitError :: P.Member (PE.Error PA.PandocError) r => T.Text -> P.Sem r a
knitError :: Text -> Sem r a
knitError msg :: Text
msg =
PandocError -> Sem r a
forall e (r :: [Effect]) a.
MemberWithError (Error e) r =>
e -> Sem r a
PE.throw (Text -> PandocError
PA.PandocSomeError (Text -> PandocError) -> Text -> PandocError
forall a b. (a -> b) -> a -> b
$ Text -> Text
textToPandocText (Text -> Text) -> Text -> Text
forall a b. (a -> b) -> a -> b
$ "Knit User Error: " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
msg)
knitMaybe
:: P.Member (PE.Error PA.PandocError) r => T.Text -> Maybe a -> P.Sem r a
knitMaybe :: Text -> Maybe a -> Sem r a
knitMaybe msg :: Text
msg = Sem r a -> (a -> Sem r a) -> Maybe a -> Sem r a
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (Text -> Sem r a
forall (r :: [Effect]) a.
Member (Error PandocError) r =>
Text -> Sem r a
knitError Text
msg) a -> Sem r a
forall (m :: * -> *) a. Monad m => a -> m a
return
knitEither
:: P.Member (PE.Error PA.PandocError) r => Either T.Text a -> P.Sem r a
knitEither :: Either Text a -> Sem r a
knitEither = (Text -> Sem r a) -> (a -> Sem r a) -> Either Text a -> Sem r a
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either Text -> Sem r a
forall (r :: [Effect]) a.
Member (Error PandocError) r =>
Text -> Sem r a
knitError a -> Sem r a
forall (m :: * -> *) a. Monad m => a -> m a
return
knitMapError
:: forall e r a
. K.KnitEffects r
=> (e -> T.Text)
-> P.Sem (PE.Error e ': r) a
-> P.Sem r a
knitMapError :: (e -> Text) -> Sem (Error e : r) a -> Sem r a
knitMapError f :: e -> Text
f = (e -> PandocError) -> Sem (Error e : r) a -> Sem r a
forall e1 e2 (r :: [Effect]) a.
Member (Error e2) r =>
(e1 -> e2) -> Sem (Error e1 : r) a -> Sem r a
PE.mapError ((e -> PandocError) -> Sem (Error e : r) a -> Sem r a)
-> (e -> PandocError) -> Sem (Error e : r) a -> Sem r a
forall a b. (a -> b) -> a -> b
$ Text -> PandocError
PA.PandocSomeError (Text -> PandocError) -> (e -> Text) -> e -> PandocError
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text
textToPandocText (Text -> Text) -> (e -> Text) -> e -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. e -> Text
f