gore-and-ash-lambdacube-0.2.0.0: Core module for Gore&Ash engine that do something.

Copyright(c) Anton Gushcha, 2016
LicenseBSD3
Maintainerncrashed@gmail.com
Stabilityexperimental
PortabilityPOSIX
Safe HaskellNone
LanguageHaskell2010

Game.GoreAndAsh.LambdaCube.Module

Contents

Description

 

Synopsis

Documentation

newtype LambdaCubeT s m a Source #

Monad transformer of the core module.

s
- State of next core module in modules chain;
m
- Next monad in modules monad stack;
a
- Type of result value;

How to embed module:

type AppStack = ModuleStack [LambdaCubeT, ... other modules ... ] IO

newtype AppMonad a = AppMonad (AppStack a)
  deriving (Functor, Applicative, Monad, MonadFix, MonadIO, MonadThrow, MonadCatch, MonadLambdaCube)

The module is not pure within first phase (see ModuleStack docs), therefore only IO can be used as end monad.

Constructors

LambdaCubeT 

Instances

MonadTrans (LambdaCubeT s) Source # 

Methods

lift :: Monad m => m a -> LambdaCubeT s m a #

Monad m => MonadState (LambdaCubeState s) (LambdaCubeT s m) Source # 
Monad m => Monad (LambdaCubeT s m) Source # 

Methods

(>>=) :: LambdaCubeT s m a -> (a -> LambdaCubeT s m b) -> LambdaCubeT s m b #

(>>) :: LambdaCubeT s m a -> LambdaCubeT s m b -> LambdaCubeT s m b #

return :: a -> LambdaCubeT s m a #

fail :: String -> LambdaCubeT s m a #

Functor m => Functor (LambdaCubeT s m) Source # 

Methods

fmap :: (a -> b) -> LambdaCubeT s m a -> LambdaCubeT s m b #

(<$) :: a -> LambdaCubeT s m b -> LambdaCubeT s m a #

MonadFix m => MonadFix (LambdaCubeT s m) Source # 

Methods

mfix :: (a -> LambdaCubeT s m a) -> LambdaCubeT s m a #

Monad m => Applicative (LambdaCubeT s m) Source # 

Methods

pure :: a -> LambdaCubeT s m a #

(<*>) :: LambdaCubeT s m (a -> b) -> LambdaCubeT s m a -> LambdaCubeT s m b #

(*>) :: LambdaCubeT s m a -> LambdaCubeT s m b -> LambdaCubeT s m b #

(<*) :: LambdaCubeT s m a -> LambdaCubeT s m b -> LambdaCubeT s m a #

MonadIO m => MonadIO (LambdaCubeT s m) Source # 

Methods

liftIO :: IO a -> LambdaCubeT s m a #

MonadMask m => MonadMask (LambdaCubeT s m) Source # 

Methods

mask :: ((forall a. LambdaCubeT s m a -> LambdaCubeT s m a) -> LambdaCubeT s m b) -> LambdaCubeT s m b

uninterruptibleMask :: ((forall a. LambdaCubeT s m a -> LambdaCubeT s m a) -> LambdaCubeT s m b) -> LambdaCubeT s m b

MonadThrow m => MonadThrow (LambdaCubeT s m) Source # 

Methods

throwM :: Exception e => e -> LambdaCubeT s m a

MonadCatch m => MonadCatch (LambdaCubeT s m) Source # 

Methods

catch :: Exception e => LambdaCubeT s m a -> (e -> LambdaCubeT s m a) -> LambdaCubeT s m a

(MonadIO m, MonadThrow m) => MonadLambdaCube (LambdaCubeT s m) Source # 
type ModuleState (LambdaCubeT s m) Source # 
type ModuleState (LambdaCubeT s m) = LambdaCubeState s

Orphan instances

(MonadIO m, MonadThrow m, GameModule m s) => GameModule (LambdaCubeT s m) (LambdaCubeState s) Source # 

Associated Types

type ModuleState (LambdaCubeT s m :: * -> *) :: *

Methods

runModule :: MonadIO m' => LambdaCubeT s m a -> LambdaCubeState s -> m' (a, LambdaCubeState s)

newModuleState :: MonadIO m' => m' (LambdaCubeState s)

withModule :: Proxy (* -> *) (LambdaCubeT s m) -> IO a -> IO a

cleanupModule :: LambdaCubeState s -> IO ()