-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Programming language with non-linear pattern-matching against unfree data
--
-- An interpreter for Egison, the programming langugage that realized
-- non-linear pattern-matching against unfree data types. With Egison, we
-- can directly represent pattern-matching against a wide range of data
-- types such as lists, multisets, sets, trees and graphs. We can find
-- Egison programs in lib and sample directories. This
-- package also include Emacs Lisp file elisp/egison-mode.el.
--
-- The following code is the program that determines poker-hands written
-- in Egison. All hands are expressed in a single pattern. Isn't it
-- exciting? We can run this code online at
-- http://www.egison.org/demonstrations/poker-hands.html.
--
--
-- The pattern-matching of Egison is very powerful. Please view and try
-- more demonstrations.
--
-- http://www.egison.org/demonstrations/
--
-- Egison is not popular at all now. Please help us to make Egison
-- popular.
@package egison
@version 3.3.8
-- | This module contains type definitions of Egison Data.
module Language.Egison.Types
data EgisonTopExpr
Define :: String -> EgisonExpr -> EgisonTopExpr
Test :: EgisonExpr -> EgisonTopExpr
Execute :: EgisonExpr -> EgisonTopExpr
LoadFile :: String -> EgisonTopExpr
Load :: String -> EgisonTopExpr
data EgisonExpr
CharExpr :: Char -> EgisonExpr
StringExpr :: String -> EgisonExpr
BoolExpr :: Bool -> EgisonExpr
RationalExpr :: Rational -> 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
HashExpr :: [(EgisonExpr, EgisonExpr)] -> EgisonExpr
LambdaExpr :: [String] -> EgisonExpr -> EgisonExpr
MemoizedLambdaExpr :: [String] -> EgisonExpr -> EgisonExpr
MemoizeExpr :: 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
MatchAllLambdaExpr :: EgisonExpr -> MatchClause -> EgisonExpr
NextMatchExpr :: EgisonExpr -> EgisonExpr -> [MatchClause] -> EgisonExpr
NextMatchAllExpr :: EgisonExpr -> EgisonExpr -> MatchClause -> EgisonExpr
NextMatchLambdaExpr :: EgisonExpr -> [MatchClause] -> EgisonExpr
NextMatchAllLambdaExpr :: EgisonExpr -> MatchClause -> EgisonExpr
MatcherBFSExpr :: MatcherInfo -> EgisonExpr
MatcherDFSExpr :: MatcherInfo -> EgisonExpr
DoExpr :: [BindingExpr] -> EgisonExpr -> EgisonExpr
IoExpr :: EgisonExpr -> EgisonExpr
SeqExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr
ApplyExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr
AlgebraicDataMatcherExpr :: [(String, [EgisonExpr])] -> EgisonExpr
GenerateArrayExpr :: [String] -> EgisonExpr -> EgisonExpr -> EgisonExpr
ArrayBoundsExpr :: EgisonExpr -> EgisonExpr
ArrayRefExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr
SomethingExpr :: EgisonExpr
UndefinedExpr :: EgisonExpr
data EgisonPattern
WildCard :: EgisonPattern
PatVar :: String -> EgisonPattern
ValuePat :: EgisonExpr -> EgisonPattern
PredPat :: EgisonExpr -> EgisonPattern
IndexedPat :: EgisonPattern -> [EgisonExpr] -> EgisonPattern
LetPat :: [BindingExpr] -> EgisonPattern -> EgisonPattern
NotPat :: EgisonPattern -> EgisonPattern
AndPat :: [EgisonPattern] -> EgisonPattern
OrPat :: [EgisonPattern] -> EgisonPattern
TuplePat :: [EgisonPattern] -> EgisonPattern
InductivePat :: String -> [EgisonPattern] -> EgisonPattern
LoopPat :: String -> LoopRange -> EgisonPattern -> EgisonPattern -> EgisonPattern
ContPat :: EgisonPattern
ApplyPat :: EgisonExpr -> [EgisonPattern] -> EgisonPattern
VarPat :: String -> EgisonPattern
data InnerExpr
ElementExpr :: EgisonExpr -> InnerExpr
SubCollectionExpr :: EgisonExpr -> InnerExpr
type BindingExpr = ([String], EgisonExpr)
type MatchClause = (EgisonPattern, EgisonExpr)
type MatcherInfo = [(PrimitivePatPattern, EgisonExpr, [(PrimitiveDataPattern, EgisonExpr)])]
data LoopRange
LoopRange :: EgisonExpr -> EgisonExpr -> EgisonPattern -> LoopRange
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 EgisonValue
World :: EgisonValue
Char :: Char -> EgisonValue
Bool :: Bool -> EgisonValue
Rational :: Rational -> EgisonValue
Integer :: Integer -> EgisonValue
Float :: Double -> EgisonValue
InductiveData :: String -> [EgisonValue] -> EgisonValue
Tuple :: [EgisonValue] -> EgisonValue
Collection :: (Seq EgisonValue) -> EgisonValue
Array :: (Array Integer EgisonValue) -> EgisonValue
IntHash :: (HashMap Integer EgisonValue) -> EgisonValue
StrHash :: (HashMap ByteString EgisonValue) -> EgisonValue
UserMatcher :: Env -> PMMode -> MatcherInfo -> EgisonValue
Func :: Env -> [String] -> EgisonExpr -> EgisonValue
MemoizedFunc :: ObjectRef -> (IORef (HashMap [Integer] ObjectRef)) -> 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 = EgisonValue
type PrimitiveFunc = WHNFData -> EgisonM WHNFData
class Egison a
toEgison :: Egison a => a -> EgisonValue
fromEgison :: Egison a => EgisonValue -> EgisonM a
data Object
Thunk :: (EgisonM WHNFData) -> Object
WHNF :: WHNFData -> Object
-- | For memoization
type ObjectRef = IORef Object
data WHNFData
Intermediate :: Intermediate -> WHNFData
Value :: EgisonValue -> WHNFData
data Intermediate
IInductiveData :: String -> [ObjectRef] -> Intermediate
ITuple :: [ObjectRef] -> Intermediate
ICollection :: (IORef (Seq Inner)) -> Intermediate
IArray :: (Array Integer ObjectRef) -> Intermediate
IIntHash :: (HashMap Integer ObjectRef) -> Intermediate
IStrHash :: (HashMap ByteString ObjectRef) -> Intermediate
data Inner
IElement :: ObjectRef -> Inner
ISubCollection :: ObjectRef -> Inner
class Egison a => EgisonWHNF a where toWHNF = Value . toEgison
toWHNF :: EgisonWHNF a => a -> WHNFData
fromWHNF :: EgisonWHNF a => WHNFData -> EgisonM a
type Env = [HashMap Var ObjectRef]
type Var = String
type Binding = (Var, ObjectRef)
nullEnv :: Env
extendEnv :: Env -> [Binding] -> Env
refVar :: Env -> Var -> EgisonM ObjectRef
type Match = [Binding]
data PMMode
BFSMode :: PMMode
DFSMode :: PMMode
pmMode :: Matcher -> PMMode
data MatchingState
MState :: Env -> [LoopContext] -> [Binding] -> [MatchingTree] -> MatchingState
data MatchingTree
MAtom :: EgisonPattern -> ObjectRef -> Matcher -> MatchingTree
MNode :: [PatternBinding] -> MatchingState -> MatchingTree
type PatternBinding = (Var, EgisonPattern)
data LoopContext
LoopContext :: Binding -> ObjectRef -> EgisonPattern -> EgisonPattern -> EgisonPattern -> LoopContext
data EgisonError
UnboundVariable :: Var -> EgisonError
TypeMismatch :: String -> WHNFData -> EgisonError
ArgumentsNumWithNames :: [String] -> Int -> Int -> EgisonError
ArgumentsNumPrimitive :: Int -> Int -> EgisonError
ArgumentsNum :: Int -> Int -> EgisonError
NotImplemented :: String -> EgisonError
Assertion :: String -> EgisonError
Match :: String -> EgisonError
Parser :: String -> EgisonError
Desugar :: String -> EgisonError
EgisonBug :: String -> EgisonError
Default :: String -> EgisonError
liftError :: MonadError e m => Either e a -> m a
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
fromEgisonM :: EgisonM a -> IO (Either EgisonError 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)
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 Typeable EgisonError
instance Show PrimitivePatPattern
instance Show PrimitiveDataPattern
instance Show EgisonExpr
instance Show EgisonPattern
instance Show LoopRange
instance Show InnerExpr
instance Show EgisonTopExpr
instance Show PMMode
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 MonadFresh EgisonM
instance Show LoopContext
instance Show MatchingTree
instance Show MatchingState
instance Show (MList m a)
instance MonadIO (FreshT IO)
instance (MonadFresh m, Monoid e) => MonadFresh (WriterT e m)
instance (MonadFresh m, Monoid e) => MonadFresh (ReaderT e m)
instance (MonadFresh m, Error e) => MonadFresh (ErrorT e m)
instance MonadFresh m => MonadFresh (StateT s m)
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 Exception EgisonError
instance Show EgisonError
instance EgisonWHNF Handle
instance EgisonWHNF Double
instance EgisonWHNF Rational
instance EgisonWHNF Integer
instance EgisonWHNF Bool
instance EgisonWHNF Char
instance Show ObjectRef
instance Show Object
instance Show WHNFData
instance (Egison a, Egison b, Egison c, Egison d) => Egison (a, b, c, d)
instance (Egison a, Egison b, Egison c) => Egison (a, b, c)
instance (Egison a, Egison b) => Egison (a, b)
instance Egison ()
instance Egison a => Egison [a]
instance Egison Handle
instance Egison Double
instance Egison Rational
instance Egison Integer
instance Egison Bool
instance Egison Char
instance Eq EgisonValue
instance Show EgisonValue
-- | This module provide desugar functions.
module Language.Egison.Desugar
data DesugarM a
runDesugarM :: DesugarM a -> Fresh (Either EgisonError a)
desugarTopExpr :: EgisonTopExpr -> EgisonM EgisonTopExpr
desugarExpr :: EgisonExpr -> EgisonM EgisonExpr
desugar :: EgisonExpr -> DesugarM EgisonExpr
instance Functor DesugarM
instance Applicative DesugarM
instance Monad DesugarM
instance MonadError EgisonError DesugarM
instance MonadFresh DesugarM
instance MonadReader Subst DesugarM
-- | This module provide Egison parser.
module Language.Egison.Parser
readTopExprs :: String -> EgisonM [EgisonTopExpr]
readTopExpr :: String -> EgisonM EgisonTopExpr
readExprs :: String -> EgisonM [EgisonExpr]
readExpr :: String -> EgisonM EgisonExpr
parseTopExprs :: String -> Either EgisonError [EgisonTopExpr]
parseTopExpr :: String -> Either EgisonError EgisonTopExpr
parseExprs :: String -> Either EgisonError [EgisonExpr]
parseExpr :: String -> Either EgisonError EgisonExpr
-- | Load a libary file
loadLibraryFile :: FilePath -> EgisonM [EgisonTopExpr]
-- | Load a file
loadFile :: FilePath -> EgisonM [EgisonTopExpr]
-- | This module provides functions to evaluate various objects.
module Language.Egison.Core
evalTopExprs :: Env -> [EgisonTopExpr] -> EgisonM Env
evalTopExprsNoIO :: Env -> [EgisonTopExpr] -> EgisonM Env
evalTopExpr :: Env -> EgisonTopExpr -> EgisonM Env
evalExpr :: Env -> EgisonExpr -> EgisonM WHNFData
evalExprDeep :: Env -> EgisonExpr -> EgisonM EgisonValue
evalRef :: ObjectRef -> EgisonM WHNFData
evalRefDeep :: ObjectRef -> EgisonM EgisonValue
evalWHNF :: WHNFData -> EgisonM EgisonValue
applyFunc :: WHNFData -> WHNFData -> EgisonM WHNFData
recursiveBind :: Env -> [(String, EgisonExpr)] -> EgisonM Env
patternMatch :: Env -> EgisonPattern -> ObjectRef -> Matcher -> EgisonM (MList EgisonM Match)
isEmptyCollection :: WHNFData -> EgisonM Bool
unconsCollection :: WHNFData -> MatchM (ObjectRef, ObjectRef)
unsnocCollection :: WHNFData -> MatchM (ObjectRef, ObjectRef)
evalStringWHNF :: WHNFData -> EgisonM String
fromStringValue :: EgisonValue -> EgisonM String
-- | This module provides primitive functions in Egison.
module Language.Egison.Primitives
primitiveEnv :: IO Env
primitiveEnvNoIO :: IO Env
-- | This is the top module of Egison.
module Language.Egison
-- | eval an Egison expression
evalEgisonExpr :: Env -> EgisonExpr -> IO (Either EgisonError EgisonValue)
-- | eval an Egison top expression
evalEgisonTopExpr :: Env -> EgisonTopExpr -> IO (Either EgisonError Env)
-- | eval Egison top expressions
evalEgisonTopExprs :: Env -> [EgisonTopExpr] -> IO (Either EgisonError Env)
-- | eval an Egison expression. Input is a Haskell string.
runEgisonExpr :: Env -> String -> IO (Either EgisonError EgisonValue)
-- | eval an Egison top expression. Input is a Haskell string.
runEgisonTopExpr :: Env -> String -> IO (Either EgisonError Env)
-- | eval Egison top expressions. Input is a Haskell string.
runEgisonTopExprs :: Env -> String -> IO (Either EgisonError Env)
-- | eval Egison top expressions without IO. Input is a Haskell string.
runEgisonTopExprsNoIO :: Env -> String -> IO (Either EgisonError Env)
-- | load an Egison library
loadEgisonLibrary :: Env -> FilePath -> IO (Either EgisonError Env)
-- | load an Egison file
loadEgisonFile :: Env -> FilePath -> IO (Either EgisonError Env)
-- | Environment that contains core libraries
initialEnv :: IO Env
-- | Environment that contains core libraries without IO primitives
initialEnvNoIO :: IO Env
-- | Version number
version :: Version
-- | This module provides utility functions.
module Language.Egison.Util
-- | Get Egison expression from the prompt. We can handle multiline input.
getEgisonExpr :: String -> InputT IO (Maybe (String, EgisonTopExpr))
-- | Get Egison expression from the prompt. We can handle multiline input.
getEgisonExprOrNewLine :: String -> InputT IO (Either (Maybe String) (String, EgisonTopExpr))
-- | Complete Egison keywords
completeEgison :: Monad m => CompletionFunc m