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

Safe HaskellNone

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 pVar m a whereSource

User interface to embedded monadic programs

Constructors

Mon :: (forall r. (Monad m, Typeable r, InjectC (MONAD m) dom (m r)) => Cont (ASTF (HODomain dom Typeable pVar) (m r)) a) -> Mon dom pVar m a 

Fields

unMon :: forall r. (Monad m, Typeable r, InjectC (MONAD m) dom (m r)) => Cont (ASTF (HODomain dom Typeable pVar) (m r)) a
 

Instances

Monad m => Monad (Mon dom pVar m) 
Functor (Mon dom pVar m) 
(Syntactic a, ~ (* -> *) (Domain a) (HODomain dom Typeable pVar), InjectC (MONAD m) dom (m (Internal a)), Monad m, Typeable1 m, Typeable (Internal a), pVar (Internal a)) => Syntactic (Mon dom pVar m a) 

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

One-layer desugaring of monadic actions

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

One-layer sugaring of monadic actions