syntactic-1.17: Generic abstract syntax, and utilities for embedded languages

Safe HaskellNone
LanguageHaskell2010

Language.Syntactic.Frontend.Monad

Description

Monadic constructs

This module is based on the paper Generic Monadic Constructs for Embedded Languages (Persson et al., IFL 2011 http://www.cse.chalmers.se/~emax/documents/persson2011generic.pdf).

Synopsis

Documentation

newtype Mon dom m a where Source #

User interface to embedded monadic programs

Constructors

Mon :: {..} -> Mon dom m a 

Fields

Instances
Monad m => Monad (Mon dom m) Source # 
Instance details

Defined in Language.Syntactic.Frontend.Monad

Methods

(>>=) :: Mon dom m a -> (a -> Mon dom m b) -> Mon dom m b #

(>>) :: Mon dom m a -> Mon dom m b -> Mon dom m b #

return :: a -> Mon dom m a #

fail :: String -> Mon dom m a #

Functor (Mon dom m) Source # 
Instance details

Defined in Language.Syntactic.Frontend.Monad

Methods

fmap :: (a -> b) -> Mon dom m a -> Mon dom m b #

(<$) :: a -> Mon dom m b -> Mon dom m a #

(Monad m, Applicative m) => Applicative (Mon dom m) Source # 
Instance details

Defined in Language.Syntactic.Frontend.Monad

Methods

pure :: a -> Mon dom m a #

(<*>) :: Mon dom m (a -> b) -> Mon dom m a -> Mon dom m b #

liftA2 :: (a -> b -> c) -> Mon dom m a -> Mon dom m b -> Mon dom m c #

(*>) :: Mon dom m a -> Mon dom m b -> Mon dom m b #

(<*) :: Mon dom m a -> Mon dom m b -> Mon dom m a #

(Syntactic a, Domain a ~ dom, IsHODomain dom (Typeable :: * -> Constraint) pVar, InjectC (MONAD m) dom (m (Internal a)), Monad m, Typeable m, Typeable (Internal a), pVar (Internal a)) => Syntactic (Mon dom m a) Source # 
Instance details

Defined in Language.Syntactic.Frontend.Monad

Associated Types

type Domain (Mon dom m a) :: * -> * Source #

type Internal (Mon dom m a) :: * Source #

Methods

desugar :: Mon dom m a -> ASTF (Domain (Mon dom m a)) (Internal (Mon dom m a)) Source #

sugar :: ASTF (Domain (Mon dom m a)) (Internal (Mon dom m a)) -> Mon dom m a Source #

type Domain (Mon dom m a) Source # 
Instance details

Defined in Language.Syntactic.Frontend.Monad

type Domain (Mon dom m a) = dom
type Internal (Mon dom m a) Source # 
Instance details

Defined in Language.Syntactic.Frontend.Monad

type Internal (Mon dom m a) = m (Internal a)

desugarMonad :: (IsHODomain dom Typeable pVar, InjectC (MONAD m) dom (m a), Monad m, Typeable m, Typeable a) => Mon dom m (ASTF dom a) -> ASTF dom (m a) Source #

One-layer desugaring of monadic actions

sugarMonad :: (IsHODomain dom Typeable pVar, Monad m, Typeable m, Typeable a, pVar a) => ASTF dom (m a) -> Mon dom m (ASTF dom a) Source #

One-layer sugaring of monadic actions