-- 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 programs *-test.egi in
-- sample/ directory. This package also include Emacs Lisp file
-- egison-mode.el in elisp/ directory.
@package egison
@version 3.0.4
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
IndexedExpr :: EgisonExpr -> [EgisonExpr] -> EgisonExpr
InductiveDataExpr :: String -> [EgisonExpr] -> EgisonExpr
TupleExpr :: [EgisonExpr] -> EgisonExpr
CollectionExpr :: (Seq InnerExpr) -> EgisonExpr
ArrayExpr :: [EgisonExpr] -> EgisonExpr
LambdaExpr :: [String] -> EgisonExpr -> EgisonExpr
PatternFunctionExpr :: [String] -> EgisonPattern -> EgisonExpr
IfExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr -> EgisonExpr
LetExpr :: [BindingExpr] -> EgisonExpr -> EgisonExpr
LetRecExpr :: [BindingExpr] -> EgisonExpr -> EgisonExpr
MatchExpr :: EgisonExpr -> EgisonExpr -> [MatchClause] -> EgisonExpr
MatchAllExpr :: EgisonExpr -> EgisonExpr -> MatchClause -> EgisonExpr
MatchLambdaExpr :: EgisonExpr -> [MatchClause] -> EgisonExpr
MatcherExpr :: MatcherInfo -> EgisonExpr
DoExpr :: [BindingExpr] -> EgisonExpr -> EgisonExpr
ApplyExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr
AlgebraicDataMatcherExpr :: [(String, [EgisonExpr])] -> EgisonExpr
GenerateArrayExpr :: [String] -> EgisonExpr -> EgisonExpr -> EgisonExpr
ArraySizeExpr :: EgisonExpr -> EgisonExpr
ArrayRefExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr
ValueExpr :: EgisonValue -> EgisonExpr
SomethingExpr :: EgisonExpr
UndefinedExpr :: EgisonExpr
type BindingExpr = ([String], EgisonExpr)
type MatchClause = (EgisonPattern, EgisonExpr)
type MatcherInfo = [(PrimitivePatPattern, EgisonExpr, [(PrimitiveDataPattern, EgisonExpr)])]
data EgisonPattern
WildCard :: EgisonPattern
PatVar :: String -> EgisonPattern
VarPat :: String -> EgisonPattern
ValuePat :: EgisonExpr -> EgisonPattern
PredPat :: EgisonExpr -> EgisonPattern
IndexedPat :: EgisonPattern -> [EgisonExpr] -> EgisonPattern
CutPat :: EgisonPattern -> EgisonPattern
NotPat :: EgisonPattern -> EgisonPattern
AndPat :: [EgisonPattern] -> EgisonPattern
OrPat :: [EgisonPattern] -> EgisonPattern
TuplePat :: [EgisonPattern] -> EgisonPattern
InductivePat :: String -> [EgisonPattern] -> EgisonPattern
ApplyPat :: EgisonExpr -> [EgisonPattern] -> EgisonPattern
LoopPat :: String -> EgisonExpr -> EgisonPattern -> EgisonPattern -> EgisonPattern
ContPat :: 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 :: (Seq EgisonValue) -> EgisonValue
Array :: (IntMap EgisonValue) -> EgisonValue
Matcher :: Matcher -> EgisonValue
Func :: Env -> [String] -> EgisonExpr -> EgisonValue
PatternFunc :: Env -> [String] -> EgisonPattern -> EgisonValue
PrimitiveFunc :: PrimitiveFunc -> EgisonValue
IOFunc :: (EgisonM WHNFData) -> EgisonValue
Port :: Handle -> EgisonValue
Something :: EgisonValue
Undefined :: EgisonValue
EOF :: EgisonValue
type Matcher = (Env, MatcherInfo)
type PrimitiveFunc = [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 :: (Seq Inner) -> Intermediate
IArray :: (IntMap ObjectRef) -> 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
fromMatcherValue :: WHNFData -> Either EgisonError Matcher
fromPrimitiveValue :: WHNFData -> Either EgisonError EgisonValue
type Var = String
type Env = [HashMap Var ObjectRef]
type Binding = (Var, ObjectRef)
nullEnv :: Env
extendEnv :: Env -> [Binding] -> Env
refVar :: Env -> Var -> EgisonM ObjectRef
data MatchingState
MState :: Env -> [LoopContext] -> [Binding] -> [MatchingTree] -> MatchingState
data MatchingTree
MAtom :: EgisonPattern -> ObjectRef -> WHNFData -> MatchingTree
MNode :: [PatternBinding] -> MatchingState -> MatchingTree
type PatternBinding = (Var, EgisonPattern)
data LoopContext
LoopContext :: (String, ObjectRef) -> ObjectRef -> EgisonPattern -> EgisonPattern -> LoopContext
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 FreshT m a
FreshT :: StateT Int m a -> FreshT m a
unFreshT :: FreshT m a -> StateT Int m a
type Fresh = FreshT Identity
class (Applicative m, Monad m) => MonadFresh m
fresh :: MonadFresh m => m String
runFreshT :: Monad m => Int -> FreshT m a -> m (a, Int)
runFresh :: Int -> Fresh a -> (a, Int)
newtype EgisonM a
EgisonM :: ErrorT EgisonError (FreshT IO) a -> EgisonM a
unEgisonM :: EgisonM a -> ErrorT EgisonError (FreshT IO) a
runEgisonM :: EgisonM a -> FreshT IO (Either EgisonError a)
liftEgisonM :: Fresh (Either EgisonError a) -> EgisonM 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
fromSeq :: Monad m => Seq 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 Functor m => Functor (FreshT m)
instance (Monad m, Functor m) => Applicative (FreshT m)
instance Monad m => Monad (FreshT m)
instance Monad m => MonadState Int (FreshT m)
instance MonadTrans FreshT
instance Functor EgisonM
instance Applicative EgisonM
instance Monad EgisonM
instance MonadIO EgisonM
instance MonadError EgisonError EgisonM
instance Show PrimitiveDataPattern
instance Show EgisonExpr
instance Show InnerExpr
instance Show EgisonPattern
instance Show EgisonTopExpr
instance MonadIO (FreshT IO)
instance MonadState s m => MonadState s (FreshT m)
instance MonadError e m => MonadError e (FreshT m)
instance (Applicative m, Monad m) => MonadFresh (FreshT m)
instance Error EgisonError
instance Show EgisonError
instance Show WHNFData
instance Eq EgisonValue
instance Show EgisonValue
module Language.Egison.Desugar
type Subst = [(String, EgisonExpr)]
newtype DesugarM a
DesugarM :: ReaderT Subst (ErrorT EgisonError Fresh) a -> DesugarM a
unDesugarM :: DesugarM a -> ReaderT Subst (ErrorT EgisonError Fresh) a
runDesugarM :: DesugarM a -> Fresh (Either EgisonError a)
desugarTopExpr :: EgisonTopExpr -> DesugarM EgisonTopExpr
desugar :: EgisonExpr -> DesugarM EgisonExpr
desugarPattern :: EgisonPattern -> DesugarM EgisonPattern
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 MonadError EgisonError DesugarM
instance MonadFresh DesugarM
instance MonadReader Subst DesugarM
instance MonadFresh (ReaderT Subst (ErrorT EgisonError Fresh))
module Language.Egison.Parser
readTopExprs :: String -> Fresh (Either EgisonError [EgisonTopExpr])
readTopExpr :: String -> Fresh (Either EgisonError EgisonTopExpr)
readExprs :: String -> Fresh (Either EgisonError [EgisonExpr])
readExpr :: String -> Fresh (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 -> WHNFData -> EgisonM WHNFData
generateArray :: Env -> String -> EgisonExpr -> EgisonExpr -> 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
fromArray :: WHNFData -> EgisonM [ObjectRef]
fromTuple :: WHNFData -> EgisonM [ObjectRef]
fromCollection :: WHNFData -> EgisonM (MList EgisonM ObjectRef)
patternMatch :: Env -> EgisonPattern -> ObjectRef -> WHNFData -> EgisonM (MList EgisonM [Binding])
processMStates :: [MList EgisonM MatchingState] -> EgisonM (MList EgisonM [Binding])
processMState :: MatchingState -> EgisonM (MList EgisonM MatchingState)
inductiveMatch :: Env -> EgisonPattern -> ObjectRef -> Matcher -> EgisonM ([EgisonPattern], MList EgisonM ObjectRef, [WHNFData])
primitivePatPatternMatch :: Env -> PrimitivePatPattern -> EgisonPattern -> MatchM ([EgisonPattern], [Binding])
primitiveDataPatternMatch :: PrimitiveDataPattern -> ObjectRef -> MatchM [Binding]
expandCollection :: WHNFData -> EgisonM (Seq 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
counter :: IORef Int
version :: Version
loadLibraries :: Env -> IO Env
loadPrimitives :: Env -> IO Env
runEgisonTopExpr :: Env -> String -> IO (Either EgisonError Env)
evalEgisonTopExpr :: Env -> EgisonTopExpr -> IO (Either EgisonError Env)
evalEgisonTopExprs :: Env -> [EgisonTopExpr] -> IO (Either EgisonError Env)