packages feed

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 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