ivory-0.1.0.7: Safe embedded C programming.

Safe HaskellNone
LanguageHaskell2010

Ivory.Language.Monad

Contents

Synopsis

Ivory Monad

data Ivory eff a Source #

Instances

Monad (Ivory eff) Source # 

Methods

(>>=) :: Ivory eff a -> (a -> Ivory eff b) -> Ivory eff b #

(>>) :: Ivory eff a -> Ivory eff b -> Ivory eff b #

return :: a -> Ivory eff a #

fail :: String -> Ivory eff a #

Functor (Ivory eff) Source # 

Methods

fmap :: (a -> b) -> Ivory eff a -> Ivory eff b #

(<$) :: a -> Ivory eff b -> Ivory eff a #

Applicative (Ivory eff) Source # 

Methods

pure :: a -> Ivory eff a #

(<*>) :: Ivory eff (a -> b) -> Ivory eff a -> Ivory eff b #

(*>) :: Ivory eff a -> Ivory eff b -> Ivory eff b #

(<*) :: Ivory eff a -> Ivory eff b -> Ivory eff a #

FreshName (Ivory eff) Source # 

Methods

freshName :: String -> Ivory eff Var Source #

IvoryType r => IvoryCall_ ((:->) * ([] *) r) eff (Ivory eff ()) Source # 

Methods

callAux_ :: Name -> Proxy (Proc *) ((* :-> [*]) r) -> [Typed Expr] -> Ivory eff () Source #

IvoryVar r => IvoryCall ((:->) * ([] *) r) eff (Ivory eff r) Source # 

Methods

callAux :: Name -> Proxy (Proc *) ((* :-> [*]) r) -> [Typed Expr] -> Ivory eff r Source #

retProxy :: Ivory eff a -> Proxy r Source #

Get a Proxy to the return type of an Ivory block.

XXX do not export

Running Functions

runIvory :: Ivory (ProcEffects s r) a -> (a, CodeBlock) Source #

Run an Ivory block computation that could require any effect.

XXX do not export

collect :: Ivory eff' a -> Ivory eff (a, CodeBlock) Source #

Collect the CodeBlock for an Ivory computation.

XXX do not export

Effects

noBreak :: Ivory (ClearBreak eff) a -> Ivory eff a Source #

noReturn :: Ivory (ClearReturn eff) a -> Ivory eff a Source #

noAlloc :: innerEff ~ ClearAlloc outerEff => Ivory innerEff a -> Ivory outerEff a Source #

Code Blocks

emits :: CodeBlock -> Ivory eff () Source #

Add some statements to the collected block.

XXX do not export

emit :: Stmt -> Ivory eff () Source #

Emit a single statement.

XXX do not export

Name Generation

freshVar :: String -> Ivory eff Var Source #

Generate a fresh variable name.

XXX do not export

result :: forall eff a. IvoryExpr a => a -> Ivory eff Var Source #

Name the result of an expression.

XXX do not export

assign :: forall eff a. IvoryExpr a => a -> Ivory eff a Source #

Sub-expression naming.

Source Locations

withLocation :: SrcLoc -> Ivory eff a -> Ivory eff a Source #