-- 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.2
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 :: [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
IndexLoopExpr :: String -> String -> String -> EgisonExpr -> EgisonExpr -> EgisonExpr -> 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
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
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
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 :: [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 -> [Binding] -> [MatchingTree] -> MatchingState
data MatchingTree
MAtom :: EgisonPattern -> ObjectRef -> WHNFData -> MatchingTree
MNode :: [PatternBinding] -> MatchingState -> MatchingTree
type PatternBinding = (Var, EgisonPattern)
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
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 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 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 [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)