glambda-1.0.2: A simply typed lambda calculus interpreter, written with GADTs

Copyright(C) 2015 Richard Eisenberg
LicenseBSD-style (see LICENSE)
MaintainerRichard Eisenberg (rae@cs.brynmawr.edu)
Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

Language.Glambda.Monad

Contents

Description

The Glam monad, allowing for pretty-printed output to the user, failing with an error message, and tracking global variables.

Synopsis

The Glam monad

data Glam a Source #

A monad giving Haskeline-like interaction, access to Globals, and the ability to abort with mzero.

Instances

Monad Glam Source # 

Methods

(>>=) :: Glam a -> (a -> Glam b) -> Glam b #

(>>) :: Glam a -> Glam b -> Glam b #

return :: a -> Glam a #

fail :: String -> Glam a #

Functor Glam Source # 

Methods

fmap :: (a -> b) -> Glam a -> Glam b #

(<$) :: a -> Glam b -> Glam a #

Applicative Glam Source # 

Methods

pure :: a -> Glam a #

(<*>) :: Glam (a -> b) -> Glam a -> Glam b #

(*>) :: Glam a -> Glam b -> Glam b #

(<*) :: Glam a -> Glam b -> Glam a #

MonadIO Glam Source # 

Methods

liftIO :: IO a -> Glam a #

GlamM Glam Source # 

Methods

printDoc :: Doc -> Glam () Source #

printLine :: Doc -> Glam () Source #

MonadState Globals Glam Source # 

Methods

get :: Glam Globals #

put :: Globals -> Glam () #

state :: (Globals -> (a, Globals)) -> Glam a #

runGlam :: Glam () -> InputT IO () Source #

Run a Glam computation

prompt :: String -> Glam (Maybe String) Source #

Prompt the user for input, returning a string if one is entered. Like getInputLine.

quit :: Glam a Source #

Abort the Glam monad

The GlamE monad

data GlamE a Source #

Like the Glam monad, but also supporting error messages via Docs

Instances

Monad GlamE Source # 

Methods

(>>=) :: GlamE a -> (a -> GlamE b) -> GlamE b #

(>>) :: GlamE a -> GlamE b -> GlamE b #

return :: a -> GlamE a #

fail :: String -> GlamE a #

Functor GlamE Source # 

Methods

fmap :: (a -> b) -> GlamE a -> GlamE b #

(<$) :: a -> GlamE b -> GlamE a #

Applicative GlamE Source # 

Methods

pure :: a -> GlamE a #

(<*>) :: GlamE (a -> b) -> GlamE a -> GlamE b #

(*>) :: GlamE a -> GlamE b -> GlamE b #

(<*) :: GlamE a -> GlamE b -> GlamE a #

GlamM GlamE Source # 

Methods

printDoc :: Doc -> GlamE () Source #

printLine :: Doc -> GlamE () Source #

MonadError Doc GlamE Source # 

Methods

throwError :: Doc -> GlamE a #

catchError :: GlamE a -> (Doc -> GlamE a) -> GlamE a #

MonadReader Globals GlamE Source # 

Methods

ask :: GlamE Globals #

local :: (Globals -> Globals) -> GlamE a -> GlamE a #

reader :: (Globals -> a) -> GlamE a #

runGlamE :: GlamE a -> Glam (Either Doc a) Source #

Run a GlamE computation

issueError :: Doc -> GlamE a Source #

Abort the computation with an error

General functions over both glamorous monads

class GlamM m where Source #

Class for the two glamorous monads

Minimal complete definition

printDoc, printLine

Methods

printDoc :: Doc -> m () Source #

Print a Doc without a newline at the end

printLine :: Doc -> m () Source #

Print a Doc with a newline

Instances