prelate 0.5.0.0 → 0.5.1.0
raw patch · 3 files changed
+89/−1 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ Prelate.App: class ExitErrorMessage err
+ Prelate.App: exitErrorMessage :: ExitErrorMessage err => err -> Sem r Text
+ Prelate.App: instance GHC.Show.Show err => Prelate.App.ExitErrorMessage err
+ Prelate.App: resumeExit :: forall err eff r. ExitErrorMessage err => Members [eff !! err, Error Text] r => InterpreterFor eff r
+ Prelate.App: runApp :: Sem AppStack () -> IO ()
+ Prelate.App: runAppLevel :: Severity -> Sem AppStack () -> IO ()
+ Prelate.App: runAppLevelE :: Severity -> Sem AppStack a -> IO (Either Text a)
+ Prelate.App: type AppStack = [ChronosTime, Log, Interrupt, Critical, Error Text] ++ ConcStack
- Prelate.Prelude: _Just :: forall a a' f. Applicative f => (a -> f a') -> Maybe a -> f (Maybe a')
+ Prelate.Prelude: _Just :: Traversal (Maybe a) (Maybe a') a a'
- Prelate.Prelude: _Left :: forall a b a' f. Applicative f => (a -> f a') -> Either a b -> f (Either a' b)
+ Prelate.Prelude: _Left :: Traversal (Either a b) (Either a' b) a a'
- Prelate.Prelude: _Nothing :: forall a f. Applicative f => (() -> f ()) -> Maybe a -> f (Maybe a)
+ Prelate.Prelude: _Nothing :: Traversal' (Maybe a) ()
- Prelate.Prelude: _Right :: forall a b b' f. Applicative f => (b -> f b') -> Either a b -> f (Either a b')
+ Prelate.Prelude: _Right :: Traversal (Either a b) (Either a b') b b'
- Prelate.Prelude: both :: forall a b f. Applicative f => (a -> f b) -> (a, a) -> f (b, b)
+ Prelate.Prelude: both :: Traversal (a, a) (b, b) a b
- Prelate.Prelude: class () => FromJSON a
+ Prelate.Prelude: class FromJSON a
- Prelate.Prelude: class () => ToJSON a
+ Prelate.Prelude: class ToJSON a
- Prelate.Prelude: folded :: forall (f :: Type -> Type) a. Foldable f => SimpleFold (f a) a
+ Prelate.Prelude: folded :: forall (f :: TYPE LiftedRep -> Type) a. Foldable f => SimpleFold (f a) a
- Prelate.Prelude: infixl 1 &
+ Prelate.Prelude: infixl 1 <&>
- Prelate.Prelude: infixl 8 ^?!
+ Prelate.Prelude: infixl 8 ^.
- Prelate.Prelude: infixr 4 <<.~
+ Prelate.Prelude: infixr 4 %~
- Prelate.Prelude: type SimpleGetter s a = forall r. () => Getting r s a
+ Prelate.Prelude: type SimpleFold s a = forall r. Monoid r => Getting r s a
Files
- lib/Prelate/App.hs +85/−0
- lib/Prelate/Prelude.hs +2/−0
- prelate.cabal +2/−1
+ lib/Prelate/App.hs view
@@ -0,0 +1,85 @@+{-# language NoImplicitPrelude #-}+{-# options_haddock prune #-}++module Prelate.App (+ runApp,+ runAppLevel,+ runAppLevelE,+ AppStack,+ resumeExit,+ stopExit,+ ExitErrorMessage (exitErrorMessage),+) where++import Conc (ConcStack, Critical, interpretCritical, interpretInterrupt)+import qualified Data.Text.IO as Text+import Incipit+import Log (Severity (Info), interpretLogStderrLevelConc)+import Polysemy.Chronos (ChronosTime, interpretTimeChronos)+import System.IO (stderr)++-- | The default stack for a Prelate app.+type AppStack =+ [+ ChronosTime,+ Log,+ Interrupt,+ Critical,+ Error Text+ ] ++ ConcStack++printError :: Text -> IO ()+printError msg =+ Text.hPutStrLn stderr ("Error: " <> msg)++-- | Run the default 'AppStack' with the specified log level and return a potential error as 'Left'.+runAppLevelE ::+ Severity ->+ Sem AppStack a ->+ IO (Either Text a)+runAppLevelE level =+ runConc .+ errorToIOFinal .+ interpretCritical .+ interpretInterrupt .+ interpretLogStderrLevelConc (Just level) .+ interpretTimeChronos++-- | Run the default 'AppStack' with the specified log level and print an potential error to stderr.+runAppLevel ::+ Severity ->+ Sem AppStack () ->+ IO ()+runAppLevel level =+ leftA printError <=< runAppLevelE level++-- | Run the default 'AppStack' and print an potential error to stderr.+runApp :: Sem AppStack () -> IO ()+runApp =+ runAppLevel Info++-- | Render an error for printing it as an exit message.+class ExitErrorMessage err where+ exitErrorMessage :: err -> Sem r Text++instance {-# overlappable #-} Show err => ExitErrorMessage err where+ exitErrorMessage = pure . show++-- | Convert an effect to 'Resumable' and throw a potential error as 'Text', exiting the program if used with 'runApp'.+--+-- Uses 'ExitErrorMessage' to render the error.+resumeExit ::+ ∀ err eff r .+ ExitErrorMessage err =>+ Members [eff !! err, Error Text] r =>+ InterpreterFor eff r+resumeExit =+ resuming @err (throw <=< exitErrorMessage)++stopExit ::+ ∀ err r .+ ExitErrorMessage err =>+ Member (Error Text) r =>+ InterpreterFor (Stop err) r+stopExit =+ leftA (throw <=< exitErrorMessage) <=< runStop
lib/Prelate/Prelude.hs view
@@ -3,6 +3,7 @@ module Incipit, module Prelate.Prelude, module Prelate.Atomic,+ module Prelate.App, module Prelate.Control.Applicative, module Prelate.Control.Monad, module Prelate.Data.List,@@ -20,6 +21,7 @@ import Lens.Micro.GHC (at) import Prelate.Atomic+import Prelate.App import Prelate.Control.Applicative import Prelate.Control.Monad import Prelate.Data.List
prelate.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: prelate-version: 0.5.0.0+version: 0.5.1.0 synopsis: A Prelude description: See https://hackage.haskell.org/package/prelate/docs/Prelate.html category: Prelude@@ -25,6 +25,7 @@ library exposed-modules: Prelate+ Prelate.App Prelate.Atomic Prelate.Control.Applicative Prelate.Control.Monad