@@ -6,12 +6,14 @@
66{-# LANGUAGE GeneralizedNewtypeDeriving #-}
77{-# LANGUAGE MultiParamTypeClasses #-}
88{-# LANGUAGE OverloadedStrings #-}
9+{-# LANGUAGE StandaloneDeriving #-}
910{-# LANGUAGE UndecidableInstances #-}
1011module Obelisk.CliApp.Types where
1112
1213import Control.Concurrent.MVar (MVar)
1314import Control.Monad.Catch (MonadCatch, MonadMask, MonadThrow)
14−import Control.Monad.Log (LoggingT, MonadLog, Severity (..), WithSeverity (..), logMessage)
15+import Control.Monad.Fail (MonadFail)
16+import Control.Monad.Log (LoggingT(..), MonadLog, Severity (..), WithSeverity (..), logMessage)
1517import Control.Monad.Reader (MonadIO, ReaderT (..), MonadReader (..), ask, mapReaderT)
1618import Control.Monad.Writer (WriterT)
1719import Control.Monad.State (StateT)
@@ -45,9 +47,12 @@ type CliThrow e m = MonadError e m
4547putLog :: CliLog m => Severity -> Text -> m ()
4648putLog sev = logMessage . Output_Log . WithSeverity sev
4749
50+-- TODO (Re)move this instance
51+deriving instance MonadFail m => MonadFail (LoggingT Output m)
52+
4853newtype DieT e m a = DieT { unDieT :: ReaderT (e -> (Text, Int)) (LoggingT Output m) a }
4954 deriving
50− ( Functor, Applicative, Monad, MonadIO
55+ ( Functor, Applicative, Monad, MonadIO, MonadFail
5156 , MonadThrow, MonadCatch, MonadMask
5257 , MonadLog Output
5358 )
@@ -114,7 +119,7 @@ newtype CliT e m a = CliT
114119 { unCliT :: ReaderT (CliConfig e) (DieT e m) a
115120 }
116121 deriving
117− ( Functor, Applicative, Monad, MonadIO
122+ ( Functor, Applicative, Monad, MonadIO, MonadFail
118123 , MonadThrow, MonadCatch, MonadMask
119124 , MonadLog Output -- CliLog
120125 , MonadError e -- CliThrow