-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | A lambda calculus interpreter
--
-- Please see README.md
@package lambda-calculator
@version 2.0.0
module Language.Lambda.Util.PrettyPrint
class PrettyPrint a
prettyPrint :: PrettyPrint a => a -> String
newtype PDoc s
PDoc :: [s] -> PDoc s
empty :: PDoc s
add :: s -> PDoc s -> PDoc s
append :: [s] -> PDoc s -> PDoc s
between :: PDoc s -> s -> s -> PDoc s -> PDoc s
betweenParens :: PDoc String -> PDoc String -> PDoc String
intercalate :: [[s]] -> [s] -> PDoc [s] -> PDoc [s]
addSpace :: PDoc String -> PDoc String
space :: Char
lambda :: Char
upperLambda :: Char
instance GHC.Show.Show s => GHC.Show.Show (Language.Lambda.Util.PrettyPrint.PDoc s)
instance GHC.Classes.Eq s => GHC.Classes.Eq (Language.Lambda.Util.PrettyPrint.PDoc s)
instance Language.Lambda.Util.PrettyPrint.PrettyPrint GHC.Base.String
instance Language.Lambda.Util.PrettyPrint.PrettyPrint s => Language.Lambda.Util.PrettyPrint.PrettyPrint (Language.Lambda.Util.PrettyPrint.PDoc s)
instance GHC.Base.Monoid (Language.Lambda.Util.PrettyPrint.PDoc s)
instance GHC.Base.Functor Language.Lambda.Util.PrettyPrint.PDoc
module Language.SystemF.Expression
data SystemFExpr name ty
Var :: name -> SystemFExpr name ty
App :: (SystemFExpr name ty) -> (SystemFExpr name ty) -> SystemFExpr name ty
Abs :: name -> (Ty ty) -> (SystemFExpr name ty) -> SystemFExpr name ty
TyAbs :: ty -> (SystemFExpr name ty) -> SystemFExpr name ty
TyApp :: (SystemFExpr name ty) -> (Ty ty) -> SystemFExpr name ty
data Ty name
TyVar :: name -> Ty name
TyArrow :: (Ty name) -> (Ty name) -> Ty name
TyForAll :: name -> (Ty name) -> Ty name
prettyPrint' :: PrettyPrint n => SystemFExpr n n -> String
pprExpr :: (PrettyPrint n, PrettyPrint t) => PDoc String -> SystemFExpr n t -> PDoc String
pprApp :: (PrettyPrint n, PrettyPrint t) => PDoc String -> SystemFExpr n t -> SystemFExpr n t -> PDoc String
pprTApp :: (PrettyPrint n, PrettyPrint t) => PDoc String -> SystemFExpr n t -> Ty t -> PDoc String
pprAbs :: (PrettyPrint n, PrettyPrint t) => PDoc String -> n -> Ty t -> SystemFExpr n t -> PDoc String
pprTy :: PrettyPrint n => PDoc String -> Bool -> Ty n -> PDoc String
pprTyArrow :: PrettyPrint n => PDoc String -> Bool -> Ty n -> Ty n -> PDoc String
pprTyArrow' :: Bool -> PDoc String -> PDoc String -> PDoc String
pprTyForAll :: PrettyPrint n => PDoc String -> n -> Ty n -> PDoc String
pprTAbs :: (PrettyPrint n, PrettyPrint t) => PDoc String -> t -> SystemFExpr n t -> PDoc String
uncurryAbs :: n -> Ty t -> SystemFExpr n t -> ([(n, Ty t)], SystemFExpr n t)
uncurryTAbs :: t -> SystemFExpr n t -> ([t], SystemFExpr n t)
instance (GHC.Show.Show ty, GHC.Show.Show name) => GHC.Show.Show (Language.SystemF.Expression.SystemFExpr name ty)
instance (GHC.Classes.Eq ty, GHC.Classes.Eq name) => GHC.Classes.Eq (Language.SystemF.Expression.SystemFExpr name ty)
instance GHC.Show.Show name => GHC.Show.Show (Language.SystemF.Expression.Ty name)
instance GHC.Classes.Eq name => GHC.Classes.Eq (Language.SystemF.Expression.Ty name)
instance (Language.Lambda.Util.PrettyPrint.PrettyPrint n, Language.Lambda.Util.PrettyPrint.PrettyPrint t) => Language.Lambda.Util.PrettyPrint.PrettyPrint (Language.SystemF.Expression.SystemFExpr n t)
instance Language.Lambda.Util.PrettyPrint.PrettyPrint n => Language.Lambda.Util.PrettyPrint.PrettyPrint (Language.SystemF.Expression.Ty n)
module Language.SystemF.Parser
parseExpr :: String -> Either ParseError (SystemFExpr String String)
parseType :: String -> Either ParseError (Ty String)
module Language.SystemF
class PrettyPrint a
prettyPrint :: PrettyPrint a => a -> String
data SystemFExpr name ty
Var :: name -> SystemFExpr name ty
App :: (SystemFExpr name ty) -> (SystemFExpr name ty) -> SystemFExpr name ty
Abs :: name -> (Ty ty) -> (SystemFExpr name ty) -> SystemFExpr name ty
TyAbs :: ty -> (SystemFExpr name ty) -> SystemFExpr name ty
TyApp :: (SystemFExpr name ty) -> (Ty ty) -> SystemFExpr name ty
evalString :: String -> Either ParseError (SystemFExpr String String)
parseExpr :: String -> Either ParseError (SystemFExpr String String)
module Language.SystemF.TypeCheck
type UniqueSupply n = [n]
type Context n t = Map n t
typecheck :: (Ord n, Eq n, PrettyPrint n) => UniqueSupply n -> Context n (Ty n) -> SystemFExpr n n -> Either String (Ty n)
tcVar :: (Ord n, Eq n, PrettyPrint n) => UniqueSupply n -> Context n (Ty n) -> n -> Either String (Ty n)
tcAbs :: (Ord n, Eq n, PrettyPrint n) => UniqueSupply n -> Context n (Ty n) -> n -> Ty n -> SystemFExpr n n -> Either String (Ty n)
tcApp :: (Ord n, Eq n, PrettyPrint n) => UniqueSupply n -> Context n (Ty n) -> SystemFExpr n n -> SystemFExpr n n -> Either String (Ty n)
tcTyAbs :: (Ord n, Eq n, PrettyPrint n) => UniqueSupply n -> Context n (Ty n) -> n -> SystemFExpr n n -> Either String (Ty n)
tcTyApp :: (Ord n, Eq n, PrettyPrint n) => UniqueSupply n -> Context n (Ty n) -> SystemFExpr n n -> Ty n -> Either String (Ty n)
unique :: UniqueSupply t -> Either String t
sub :: Eq n => n -> Ty n -> SystemFExpr n n -> SystemFExpr n n
subTy :: Eq n => n -> Ty n -> Ty n -> Ty n
tyMismatchMsg :: (PrettyPrint t, PrettyPrint t') => t -> t' -> String
module Language.Lambda.Expression
data LambdaExpr name
Var :: name -> LambdaExpr name
App :: (LambdaExpr name) -> (LambdaExpr name) -> LambdaExpr name
Abs :: name -> (LambdaExpr name) -> LambdaExpr name
pprExpr :: PrettyPrint n => PDoc String -> LambdaExpr n -> PDoc String
pprAbs :: PrettyPrint n => PDoc String -> n -> LambdaExpr n -> PDoc String
pprApp :: PrettyPrint n => PDoc String -> LambdaExpr n -> LambdaExpr n -> PDoc String
uncurry :: n -> LambdaExpr n -> ([n], LambdaExpr n)
instance GHC.Show.Show name => GHC.Show.Show (Language.Lambda.Expression.LambdaExpr name)
instance GHC.Classes.Eq name => GHC.Classes.Eq (Language.Lambda.Expression.LambdaExpr name)
instance Language.Lambda.Util.PrettyPrint.PrettyPrint a => Language.Lambda.Util.PrettyPrint.PrettyPrint (Language.Lambda.Expression.LambdaExpr a)
module Language.Lambda.Parser
parseExpr :: String -> Either ParseError (LambdaExpr String)
module Language.Lambda.Eval
evalExpr :: Eq n => [n] -> LambdaExpr n -> LambdaExpr n
betaReduce :: Eq n => [n] -> LambdaExpr n -> LambdaExpr n -> LambdaExpr n
alphaConvert :: Eq n => [n] -> [n] -> LambdaExpr n -> LambdaExpr n
etaConvert :: Eq n => LambdaExpr n -> LambdaExpr n
sub :: Eq n => n -> LambdaExpr n -> LambdaExpr n -> LambdaExpr n
freeVarsOf :: Eq n => LambdaExpr n -> [n]
module Language.Lambda
data LambdaExpr name
Var :: name -> LambdaExpr name
App :: (LambdaExpr name) -> (LambdaExpr name) -> LambdaExpr name
Abs :: name -> (LambdaExpr name) -> LambdaExpr name
-- | The abstract data type ParseError represents parse errors. It
-- provides the source position (SourcePos) of the error and a
-- list of error messages (Message). A ParseError can be
-- returned by the function parse. ParseError is an
-- instance of the Show and Eq classes.
data ParseError :: *
class PrettyPrint a
prettyPrint :: PrettyPrint a => a -> String
evalExpr :: Eq n => [n] -> LambdaExpr n -> LambdaExpr n
evalString :: String -> Either ParseError (LambdaExpr String)
parseExpr :: String -> Either ParseError (LambdaExpr String)
uniques :: [String]