-- 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]