{-# LANGUAGE DerivingVia #-}
module Iris.App
( CliApp (..)
, runCliApp
, runCliAppManually
) where
import Control.Monad.IO.Class (MonadIO)
import Control.Monad.Reader (MonadReader, ReaderT (..))
import Control.Monad.IO.Unlift (MonadUnliftIO)
import Iris.Env (CliEnv, CliEnvSettings, mkCliEnv)
newtype CliApp cmd appEnv a = CliApp
{ forall cmd appEnv a.
CliApp cmd appEnv a -> CliEnv cmd appEnv -> IO a
unCliApp :: CliEnv cmd appEnv -> IO a
} deriving
( forall a b. a -> CliApp cmd appEnv b -> CliApp cmd appEnv a
forall a b. (a -> b) -> CliApp cmd appEnv a -> CliApp cmd appEnv b
forall cmd appEnv a b.
a -> CliApp cmd appEnv b -> CliApp cmd appEnv a
forall cmd appEnv a b.
(a -> b) -> CliApp cmd appEnv a -> CliApp cmd appEnv b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: forall a b. a -> CliApp cmd appEnv b -> CliApp cmd appEnv a
$c<$ :: forall cmd appEnv a b.
a -> CliApp cmd appEnv b -> CliApp cmd appEnv a
fmap :: forall a b. (a -> b) -> CliApp cmd appEnv a -> CliApp cmd appEnv b
$cfmap :: forall cmd appEnv a b.
(a -> b) -> CliApp cmd appEnv a -> CliApp cmd appEnv b
Functor
, forall a. a -> CliApp cmd appEnv a
forall cmd appEnv. Functor (CliApp cmd appEnv)
forall a b.
CliApp cmd appEnv a -> CliApp cmd appEnv b -> CliApp cmd appEnv a
forall a b.
CliApp cmd appEnv a -> CliApp cmd appEnv b -> CliApp cmd appEnv b
forall a b.
CliApp cmd appEnv (a -> b)
-> CliApp cmd appEnv a -> CliApp cmd appEnv b
forall cmd appEnv a. a -> CliApp cmd appEnv a
forall a b c.
(a -> b -> c)
-> CliApp cmd appEnv a
-> CliApp cmd appEnv b
-> CliApp cmd appEnv c
forall cmd appEnv a b.
CliApp cmd appEnv a -> CliApp cmd appEnv b -> CliApp cmd appEnv a
forall cmd appEnv a b.
CliApp cmd appEnv a -> CliApp cmd appEnv b -> CliApp cmd appEnv b
forall cmd appEnv a b.
CliApp cmd appEnv (a -> b)
-> CliApp cmd appEnv a -> CliApp cmd appEnv b
forall cmd appEnv a b c.
(a -> b -> c)
-> CliApp cmd appEnv a
-> CliApp cmd appEnv b
-> CliApp cmd appEnv c
forall (f :: * -> *).
Functor f
-> (forall a. a -> f a)
-> (forall a b. f (a -> b) -> f a -> f b)
-> (forall a b c. (a -> b -> c) -> f a -> f b -> f c)
-> (forall a b. f a -> f b -> f b)
-> (forall a b. f a -> f b -> f a)
-> Applicative f
<* :: forall a b.
CliApp cmd appEnv a -> CliApp cmd appEnv b -> CliApp cmd appEnv a
$c<* :: forall cmd appEnv a b.
CliApp cmd appEnv a -> CliApp cmd appEnv b -> CliApp cmd appEnv a
*> :: forall a b.
CliApp cmd appEnv a -> CliApp cmd appEnv b -> CliApp cmd appEnv b
$c*> :: forall cmd appEnv a b.
CliApp cmd appEnv a -> CliApp cmd appEnv b -> CliApp cmd appEnv b
liftA2 :: forall a b c.
(a -> b -> c)
-> CliApp cmd appEnv a
-> CliApp cmd appEnv b
-> CliApp cmd appEnv c
$cliftA2 :: forall cmd appEnv a b c.
(a -> b -> c)
-> CliApp cmd appEnv a
-> CliApp cmd appEnv b
-> CliApp cmd appEnv c
<*> :: forall a b.
CliApp cmd appEnv (a -> b)
-> CliApp cmd appEnv a -> CliApp cmd appEnv b
$c<*> :: forall cmd appEnv a b.
CliApp cmd appEnv (a -> b)
-> CliApp cmd appEnv a -> CliApp cmd appEnv b
pure :: forall a. a -> CliApp cmd appEnv a
$cpure :: forall cmd appEnv a. a -> CliApp cmd appEnv a
Applicative
, forall a. a -> CliApp cmd appEnv a
forall cmd appEnv. Applicative (CliApp cmd appEnv)
forall a b.
CliApp cmd appEnv a -> CliApp cmd appEnv b -> CliApp cmd appEnv b
forall a b.
CliApp cmd appEnv a
-> (a -> CliApp cmd appEnv b) -> CliApp cmd appEnv b
forall cmd appEnv a. a -> CliApp cmd appEnv a
forall cmd appEnv a b.
CliApp cmd appEnv a -> CliApp cmd appEnv b -> CliApp cmd appEnv b
forall cmd appEnv a b.
CliApp cmd appEnv a
-> (a -> CliApp cmd appEnv b) -> CliApp cmd appEnv b
forall (m :: * -> *).
Applicative m
-> (forall a b. m a -> (a -> m b) -> m b)
-> (forall a b. m a -> m b -> m b)
-> (forall a. a -> m a)
-> Monad m
return :: forall a. a -> CliApp cmd appEnv a
$creturn :: forall cmd appEnv a. a -> CliApp cmd appEnv a
>> :: forall a b.
CliApp cmd appEnv a -> CliApp cmd appEnv b -> CliApp cmd appEnv b
$c>> :: forall cmd appEnv a b.
CliApp cmd appEnv a -> CliApp cmd appEnv b -> CliApp cmd appEnv b
>>= :: forall a b.
CliApp cmd appEnv a
-> (a -> CliApp cmd appEnv b) -> CliApp cmd appEnv b
$c>>= :: forall cmd appEnv a b.
CliApp cmd appEnv a
-> (a -> CliApp cmd appEnv b) -> CliApp cmd appEnv b
Monad
, forall a. IO a -> CliApp cmd appEnv a
forall cmd appEnv. Monad (CliApp cmd appEnv)
forall cmd appEnv a. IO a -> CliApp cmd appEnv a
forall (m :: * -> *).
Monad m -> (forall a. IO a -> m a) -> MonadIO m
liftIO :: forall a. IO a -> CliApp cmd appEnv a
$cliftIO :: forall cmd appEnv a. IO a -> CliApp cmd appEnv a
MonadIO
, MonadReader (CliEnv cmd appEnv)
, forall b.
((forall a. CliApp cmd appEnv a -> IO a) -> IO b)
-> CliApp cmd appEnv b
forall cmd appEnv. MonadIO (CliApp cmd appEnv)
forall cmd appEnv b.
((forall a. CliApp cmd appEnv a -> IO a) -> IO b)
-> CliApp cmd appEnv b
forall (m :: * -> *).
MonadIO m
-> (forall b. ((forall a. m a -> IO a) -> IO b) -> m b)
-> MonadUnliftIO m
withRunInIO :: forall b.
((forall a. CliApp cmd appEnv a -> IO a) -> IO b)
-> CliApp cmd appEnv b
$cwithRunInIO :: forall cmd appEnv b.
((forall a. CliApp cmd appEnv a -> IO a) -> IO b)
-> CliApp cmd appEnv b
MonadUnliftIO
) via ReaderT (CliEnv cmd appEnv) IO
runCliApp :: CliEnvSettings cmd appEnv -> CliApp cmd appEnv a -> IO a
runCliApp :: forall cmd appEnv a.
CliEnvSettings cmd appEnv -> CliApp cmd appEnv a -> IO a
runCliApp CliEnvSettings cmd appEnv
settings CliApp cmd appEnv a
cliApp = do
CliEnv cmd appEnv
cliEnv <- forall cmd appEnv.
CliEnvSettings cmd appEnv -> IO (CliEnv cmd appEnv)
mkCliEnv CliEnvSettings cmd appEnv
settings
forall cmd appEnv a.
CliEnv cmd appEnv -> CliApp cmd appEnv a -> IO a
runCliAppManually CliEnv cmd appEnv
cliEnv CliApp cmd appEnv a
cliApp
runCliAppManually :: CliEnv cmd appEnv -> CliApp cmd appEnv a -> IO a
runCliAppManually :: forall cmd appEnv a.
CliEnv cmd appEnv -> CliApp cmd appEnv a -> IO a
runCliAppManually CliEnv cmd appEnv
cliEnv (CliApp CliEnv cmd appEnv -> IO a
run) = CliEnv cmd appEnv -> IO a
run CliEnv cmd appEnv
cliEnv