@@ -6,12 +6,14 @@
6{-# LANGUAGE GeneralizedNewtypeDeriving #-}
6{-# LANGUAGE GeneralizedNewtypeDeriving #-}
7{-# LANGUAGE MultiParamTypeClasses #-}
7{-# LANGUAGE MultiParamTypeClasses #-}
8{-# LANGUAGE OverloadedStrings #-}
8{-# LANGUAGE OverloadedStrings #-}
9+{-# LANGUAGE StandaloneDeriving #-}
9{-# LANGUAGE UndecidableInstances #-}
10{-# LANGUAGE UndecidableInstances #-}
10module Obelisk.CliApp.Types where
11module Obelisk.CliApp.Types where
12import Control.Concurrent.MVar (MVar)
13import Control.Concurrent.MVar (MVar)
13import Control.Monad.Catch (MonadCatch, MonadMask, MonadThrow)
14import Control.Monad.Catch (MonadCatch, MonadMask, MonadThrow)
15+import Control.Monad.Fail (MonadFail)
14−import Control.Monad.Log (LoggingT, MonadLog, Severity (..), WithSeverity (..), logMessage)
16+import Control.Monad.Log (LoggingT(..), MonadLog, Severity (..), WithSeverity (..), logMessage)
15import Control.Monad.Reader (MonadIO, ReaderT (..), MonadReader (..), ask, mapReaderT)
17import Control.Monad.Reader (MonadIO, ReaderT (..), MonadReader (..), ask, mapReaderT)
16import Control.Monad.Writer (WriterT)
18import Control.Monad.Writer (WriterT)
17import Control.Monad.State (StateT)
19import Control.Monad.State (StateT)
@@ -45,9 +47,12 @@ type CliThrow e m = MonadError e m
45putLog :: CliLog m => Severity -> Text -> m ()
47putLog :: CliLog m => Severity -> Text -> m ()
46putLog sev = logMessage . Output_Log . WithSeverity sev
48putLog sev = logMessage . Output_Log . WithSeverity sev
50+-- TODO (Re)move this instance
51+deriving instance MonadFail m => MonadFail (LoggingT Output m)
48newtype DieT e m a = DieT { unDieT :: ReaderT (e -> (Text, Int)) (LoggingT Output m) a }
53newtype DieT e m a = DieT { unDieT :: ReaderT (e -> (Text, Int)) (LoggingT Output m) a }
50− ( Functor, Applicative, Monad, MonadIO
55+ ( Functor, Applicative, Monad, MonadIO, MonadFail
51 , MonadThrow, MonadCatch, MonadMask
56 , MonadThrow, MonadCatch, MonadMask
52 , MonadLog Output
57 , MonadLog Output
@@ -114,7 +119,7 @@ newtype CliT e m a = CliT
114 { unCliT :: ReaderT (CliConfig e) (DieT e m) a
119 { unCliT :: ReaderT (CliConfig e) (DieT e m) a
117− ( Functor, Applicative, Monad, MonadIO
122+ ( Functor, Applicative, Monad, MonadIO, MonadFail
118 , MonadThrow, MonadCatch, MonadMask
123 , MonadThrow, MonadCatch, MonadMask
119 , MonadLog Output -- CliLog
124 , MonadLog Output -- CliLog
120 , MonadError e -- CliThrow
125 , MonadError e -- CliThrow