-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | An Interpreter for the Programming Language Egison
--
-- An interpreter for the programming language Egison. A feature of
-- Egison is the strong pattern match facility. With Egison, you can
-- represent pattern matching for unfree data intuitively, especially for
-- collection data, such as lists, multisets, sets, and so on. This
-- package include sample Egison program codes *-test.egi in
-- sample/ directory. This package also include Emacs Lisp file
-- egison-mode.el in elisp/ directory.
@package egison
@version 3.0.0
module Language.Egison.Types
data EgisonTopExpr
Define :: String -> EgisonExpr -> EgisonTopExpr
Test :: EgisonExpr -> EgisonTopExpr
Execute :: [String] -> EgisonTopExpr
LoadFile :: String -> EgisonTopExpr
Load :: String -> EgisonTopExpr
data EgisonExpr
CharExpr :: Char -> EgisonExpr
StringExpr :: String -> EgisonExpr
BoolExpr :: Bool -> EgisonExpr
IntegerExpr :: Integer -> EgisonExpr
FloatExpr :: Double -> EgisonExpr
VarExpr :: String -> [EgisonExpr] -> EgisonExpr
InductiveDataExpr :: String -> [EgisonExpr] -> EgisonExpr
TupleExpr :: [EgisonExpr] -> EgisonExpr
CollectionExpr :: [InnerExpr] -> EgisonExpr
PatternExpr :: EgisonPattern -> EgisonExpr
LambdaExpr :: [String] -> EgisonExpr -> EgisonExpr
IfExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr -> EgisonExpr
LetExpr :: [BindingExpr] -> EgisonExpr -> EgisonExpr
LetRecExpr :: [BindingExpr] -> EgisonExpr -> EgisonExpr
LoopExpr :: String -> String -> EgisonExpr -> EgisonExpr -> EgisonExpr -> EgisonExpr
MatchExpr :: EgisonExpr -> EgisonExpr -> [MatchClause] -> EgisonExpr
MatchAllExpr :: EgisonExpr -> EgisonExpr -> MatchClause -> EgisonExpr
FunctionExpr :: EgisonExpr -> [MatchClause] -> EgisonExpr
MatcherExpr :: MatcherInfo -> EgisonExpr
DoExpr :: [BindingExpr] -> EgisonExpr -> EgisonExpr
ApplyExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr
AlgebraicDataMatcher :: [EgisonExpr] -> EgisonExpr
SomethingExpr :: EgisonExpr
UndefinedExpr :: EgisonExpr
type BindingExpr = ([String], EgisonExpr)
type MatchClause = (EgisonExpr, EgisonExpr)
type MatcherInfo = [(PrimitivePatPattern, EgisonExpr, [(PrimitiveDataPattern, EgisonExpr)])]
data EgisonPattern
WildCard :: EgisonPattern
PatVar :: String -> [EgisonExpr] -> EgisonPattern
ValuePat :: EgisonExpr -> EgisonPattern
PredPat :: EgisonExpr -> EgisonPattern
CutPat :: EgisonExpr -> EgisonPattern
NotPat :: EgisonExpr -> EgisonPattern
AndPat :: [EgisonExpr] -> EgisonPattern
OrPat :: [EgisonExpr] -> EgisonPattern
InductivePattern :: String -> [EgisonExpr] -> EgisonPattern
data PrimitivePatPattern
PPWildCard :: PrimitivePatPattern
PPPatVar :: PrimitivePatPattern
PPValuePat :: String -> PrimitivePatPattern
PPInductivePat :: String -> [PrimitivePatPattern] -> PrimitivePatPattern
data PrimitiveDataPattern
PDWildCard :: PrimitiveDataPattern
PDPatVar :: String -> PrimitiveDataPattern
PDInductivePat :: String -> [PrimitiveDataPattern] -> PrimitiveDataPattern
PDEmptyPat :: PrimitiveDataPattern
PDConsPat :: PrimitiveDataPattern -> PrimitiveDataPattern -> PrimitiveDataPattern
PDSnocPat :: PrimitiveDataPattern -> PrimitiveDataPattern -> PrimitiveDataPattern
PDConstantPat :: EgisonExpr -> PrimitiveDataPattern
data InnerExpr
ElementExpr :: EgisonExpr -> InnerExpr
SubCollectionExpr :: EgisonExpr -> InnerExpr
data EgisonValue
World :: EgisonValue
Char :: Char -> EgisonValue
String :: String -> EgisonValue
Bool :: Bool -> EgisonValue
Integer :: Integer -> EgisonValue
Float :: Double -> EgisonValue
InductiveData :: String -> [EgisonValue] -> EgisonValue
Tuple :: [EgisonValue] -> EgisonValue
Collection :: [EgisonValue] -> EgisonValue
Pattern :: EgisonPattern -> EgisonValue
Matcher :: Matcher -> EgisonValue
Func :: Env -> [String] -> EgisonExpr -> EgisonValue
PrimitiveFunc :: PrimitiveFunc -> EgisonValue
IOFunc :: IOFunc -> EgisonValue
Port :: Handle -> EgisonValue
Something :: EgisonValue
EOF :: EgisonValue
type Matcher = (Env, MatcherInfo)
type PrimitiveFunc = [WHNFData] -> Either EgisonError EgisonValue
type IOFunc = [WHNFData] -> EgisonM EgisonValue
data Object
Thunk :: (EgisonM WHNFData) -> Object
WHNF :: WHNFData -> Object
type ObjectRef = IORef Object
data WHNFData
Intermediate :: Intermediate -> WHNFData
Value :: EgisonValue -> WHNFData
data Intermediate
IInductiveData :: String -> [ObjectRef] -> Intermediate
ITuple :: [ObjectRef] -> Intermediate
ICollection :: [Inner] -> Intermediate
data Inner
IElement :: ObjectRef -> Inner
ISubCollection :: ObjectRef -> Inner
fromCharValue :: WHNFData -> Either EgisonError Char
fromStringValue :: WHNFData -> Either EgisonError String
fromBoolValue :: WHNFData -> Either EgisonError Bool
fromIntegerValue :: WHNFData -> Either EgisonError Integer
fromFloatValue :: WHNFData -> Either EgisonError Double
fromPortValue :: WHNFData -> Either EgisonError Handle
fromPatternValue :: WHNFData -> Either EgisonError EgisonPattern
fromMatcherValue :: WHNFData -> Either EgisonError Matcher
fromPrimitiveValue :: WHNFData -> Either EgisonError EgisonValue
type Var = (String, [Integer])
type Env = [HashMap Var ObjectRef]
type Binding = (Var, ObjectRef)
nullEnv :: Env
extendEnv :: Env -> [Binding] -> Env
refVar :: Env -> Var -> EgisonM ObjectRef
data MatchingState
MState :: Env -> [Binding] -> [MatchingTree] -> MatchingState
data MatchingTree
MAtom :: EgisonExpr -> ObjectRef -> WHNFData -> MatchingTree
MNode :: [PatternBinding] -> MatchingState -> MatchingTree
type PatternBinding = (Var, EgisonExpr)
data EgisonError
Parser :: ParseError -> EgisonError
UnboundVariable :: Var -> EgisonError
TypeMismatch :: String -> WHNFData -> EgisonError
ArgumentsNum :: Int -> Int -> EgisonError
NotImplemented :: String -> EgisonError
Assertion :: String -> EgisonError
Match :: String -> EgisonError
Desugar :: String -> EgisonError
Default :: String -> EgisonError
liftError :: MonadError e m => Either e a -> m a
newtype EgisonM a
EgisonM :: ErrorT EgisonError IO a -> EgisonM a
unEgisonM :: EgisonM a -> ErrorT EgisonError IO a
runEgisonM :: EgisonM a -> IO (Either EgisonError a)
type MatchM = MaybeT EgisonM
matchFail :: MatchM a
data MList m a
MNil :: MList m a
MCons :: a -> (m (MList m a)) -> MList m a
fromList :: Monad m => [a] -> MList m a
fromMList :: Monad m => MList m a -> m [a]
msingleton :: Monad m => a -> MList m a
mfoldr :: Monad m => (a -> m b -> m b) -> m b -> MList m a -> m b
mappend :: Monad m => MList m a -> m (MList m a) -> m (MList m a)
mconcat :: Monad m => MList m (MList m a) -> m (MList m a)
mmap :: Monad m => (a -> m b) -> MList m a -> m (MList m b)
mfor :: Monad m => MList m a -> (a -> m b) -> m (MList m b)
instance Show PrimitivePatPattern
instance Show InnerExpr
instance Show EgisonExpr
instance Show EgisonPattern
instance Show PrimitiveDataPattern
instance Show EgisonTopExpr
instance Functor EgisonM
instance Applicative EgisonM
instance Monad EgisonM
instance MonadIO EgisonM
instance MonadError EgisonError EgisonM
instance Error EgisonError
instance Show EgisonError
instance Show WHNFData
instance Eq EgisonValue
instance Show EgisonValue
module Language.Egison.Desugar
newtype DesugarM a
DesugarM :: StateT Int (ErrorT EgisonError Identity) a -> DesugarM a
unDesugarM :: DesugarM a -> StateT Int (ErrorT EgisonError Identity) a
class (Applicative m, Monad m) => MonadFresh m
fresh :: MonadFresh m => m String
runDesugarM :: DesugarM a -> Either EgisonError a
desugar :: EgisonExpr -> DesugarM EgisonExpr
desugarBinding :: BindingExpr -> DesugarM BindingExpr
desugarBindings :: [BindingExpr] -> DesugarM [BindingExpr]
desugarMatchClause :: MatchClause -> DesugarM MatchClause
desugarMatchClauses :: [MatchClause] -> DesugarM [MatchClause]
instance Functor DesugarM
instance Applicative DesugarM
instance Monad DesugarM
instance MonadState Int DesugarM
instance MonadError EgisonError DesugarM
instance MonadFresh DesugarM
module Language.Egison.Parser
readTopExprs :: String -> Either EgisonError [EgisonTopExpr]
readTopExpr :: String -> Either EgisonError EgisonTopExpr
readExprs :: String -> Either EgisonError [EgisonExpr]
readExpr :: String -> Either EgisonError EgisonExpr
module Language.Egison.Core
evalTopExprs :: Env -> [EgisonTopExpr] -> EgisonM Env
evalTopExpr :: Env -> EgisonTopExpr -> EgisonM Env
loadFile :: FilePath -> EgisonM [EgisonTopExpr]
loadLibraryFile :: FilePath -> EgisonM [EgisonTopExpr]
evalExpr :: Env -> EgisonExpr -> EgisonM WHNFData
evalExpr' :: Env -> EgisonExpr -> EgisonM EgisonValue
evalRef :: ObjectRef -> EgisonM WHNFData
evalRef' :: ObjectRef -> EgisonM EgisonValue
evalDeep :: WHNFData -> EgisonM EgisonValue
applyFunc :: WHNFData -> [ObjectRef] -> EgisonM WHNFData
newThunk :: Env -> EgisonExpr -> EgisonM ObjectRef
writeThunk :: ObjectRef -> WHNFData -> EgisonM ()
newEvaluatedThunk :: WHNFData -> EgisonM ObjectRef
makeBindings :: [String] -> [ObjectRef] -> [Binding]
recursiveBind :: Env -> [(String, EgisonExpr)] -> EgisonM Env
fromTuple :: WHNFData -> EgisonM [ObjectRef]
fromCollection :: WHNFData -> EgisonM (MList EgisonM ObjectRef)
patternMatch :: Env -> EgisonExpr -> ObjectRef -> WHNFData -> EgisonM (MList EgisonM [Binding])
processMStates :: [MList EgisonM MatchingState] -> EgisonM (MList EgisonM [Binding])
processMState :: MatchingState -> EgisonM (MList EgisonM MatchingState)
evalPattern :: Env -> EgisonExpr -> EgisonM EgisonExpr
inductiveMatch :: Env -> EgisonExpr -> ObjectRef -> Matcher -> EgisonM ([EgisonExpr], MList EgisonM ObjectRef, [WHNFData])
primitivePatPatternMatch :: Env -> PrimitivePatPattern -> EgisonExpr -> MatchM ([EgisonExpr], [Binding])
primitiveDataPatternMatch :: PrimitiveDataPattern -> ObjectRef -> MatchM [Binding]
expandCollection :: WHNFData -> EgisonM [Inner]
isEmptyCollection :: ObjectRef -> EgisonM Bool
unconsCollection :: ObjectRef -> MatchM (ObjectRef, ObjectRef)
unsnocCollection :: ObjectRef -> MatchM (ObjectRef, ObjectRef)
module Language.Egison.Primitives
primitiveEnv :: IO Env
module Language.Egison
version :: Version
loadLibraries :: Env -> IO Env
loadPrimitives :: Env -> IO Env
runEgisonTopExpr :: Env -> String -> IO (Either EgisonError Env)
evalEgisonTopExpr :: Env -> EgisonTopExpr -> IO (Either EgisonError Env)