iris-0.1.0.0: Haskell CLI framework
Copyright(c) 2022 Dmitrii Kovanikov
LicenseMPL-2.0
MaintainerDmitrii Kovanikov <kovanikov@gmail.com>
StabilityExperimental
PortabilityPortable
Safe HaskellSafe-Inferred
LanguageHaskell2010

Iris.App

Description

The application monad — CliApp.

Many functions in Iris are polymorphic over any monad that has the MonadReader constraint.

Implement your own application monad as a newtype wrapper around CliApp in the following way.

newtype App a = App
    { unApp :: Iris.CliApp MyOptions MyEnv a
    } deriving newtype
        ( Functor
        , Applicative
        , Monad
        , MonadIO
        , MonadUnliftIO
        , MonadReader (Iris.CliEnv MyOptions MyEnv)
        )

Since: 0.0.0.0

Synopsis

Documentation

newtype CliApp cmd appEnv a Source #

Main monad for your CLI application.

The type variables are:

  • cmd: the data type for your CLI arguments
  • appEnv: custom environment for your application (can be just () if you don't need one)
  • a: the value inside the monadic context

Since: 0.0.0.0

Constructors

CliApp 

Fields

Instances

Instances details
MonadIO (CliApp cmd appEnv) Source #

Since: 0.0.0.0

Instance details

Defined in Iris.App

Methods

liftIO :: IO a -> CliApp cmd appEnv a #

Applicative (CliApp cmd appEnv) Source #

Since: 0.0.0.0

Instance details

Defined in Iris.App

Methods

pure :: a -> CliApp cmd appEnv a #

(<*>) :: CliApp cmd appEnv (a -> b) -> CliApp cmd appEnv a -> CliApp cmd appEnv b #

liftA2 :: (a -> b -> c) -> CliApp cmd appEnv a -> CliApp cmd appEnv b -> CliApp cmd appEnv c #

(*>) :: CliApp cmd appEnv a -> CliApp cmd appEnv b -> CliApp cmd appEnv b #

(<*) :: CliApp cmd appEnv a -> CliApp cmd appEnv b -> CliApp cmd appEnv a #

Functor (CliApp cmd appEnv) Source #

Since: 0.0.0.0

Instance details

Defined in Iris.App

Methods

fmap :: (a -> b) -> CliApp cmd appEnv a -> CliApp cmd appEnv b #

(<$) :: a -> CliApp cmd appEnv b -> CliApp cmd appEnv a #

Monad (CliApp cmd appEnv) Source #

Since: 0.0.0.0

Instance details

Defined in Iris.App

Methods

(>>=) :: CliApp cmd appEnv a -> (a -> CliApp cmd appEnv b) -> CliApp cmd appEnv b #

(>>) :: CliApp cmd appEnv a -> CliApp cmd appEnv b -> CliApp cmd appEnv b #

return :: a -> CliApp cmd appEnv a #

MonadUnliftIO (CliApp cmd appEnv) Source #

Since: 0.0.0.0

Instance details

Defined in Iris.App

Methods

withRunInIO :: ((forall a. CliApp cmd appEnv a -> IO a) -> IO b) -> CliApp cmd appEnv b #

MonadReader (CliEnv cmd appEnv) (CliApp cmd appEnv) Source #

Since: 0.0.0.0

Instance details

Defined in Iris.App

Methods

ask :: CliApp cmd appEnv (CliEnv cmd appEnv) #

local :: (CliEnv cmd appEnv -> CliEnv cmd appEnv) -> CliApp cmd appEnv a -> CliApp cmd appEnv a #

reader :: (CliEnv cmd appEnv -> a) -> CliApp cmd appEnv a #

runCliApp :: CliEnvSettings cmd appEnv -> CliApp cmd appEnv a -> IO a Source #

Run application with settings.

This function is supposed to be used in your main function:

app :: App ()
app = ... your main application ...

main :: IO ()
main = runCliApp mySettings (unApp app)

Since: 0.0.0.0

runCliAppManually :: CliEnv cmd appEnv -> CliApp cmd appEnv a -> IO a Source #

Run application by constructing CliEnv settings manually.

Since: 0.0.0.0