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 where

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)

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)

One-layer sugaring of monadic actions