-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Programming language with non-linear pattern-matching against unfree data types -- @package egison @version 3.2.8 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 RationalExpr :: Rational -> 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 HashExpr :: [(EgisonExpr, 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 LetPat :: [BindingExpr] -> EgisonPattern -> 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 -> LoopRange -> EgisonPattern -> EgisonPattern -> EgisonPattern ContPat :: EgisonPattern data LoopRange LoopRangeConstant :: EgisonExpr -> EgisonExpr -> LoopRange LoopRangeVariable :: 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 InnerExpr ElementExpr :: EgisonExpr -> InnerExpr SubCollectionExpr :: EgisonExpr -> InnerExpr 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 :: (IntMap EgisonValue) -> EgisonValue IntHash :: (HashMap Integer EgisonValue) -> EgisonValue StrHash :: (HashMap ByteString 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 IIntHash :: (HashMap Integer ObjectRef) -> Intermediate IStrHash :: (HashMap ByteString ObjectRef) -> Intermediate data Inner IElement :: ObjectRef -> Inner ISubCollection :: ObjectRef -> Inner data EgisonHashKey IntKey :: Integer -> EgisonHashKey StrKey :: ByteString -> EgisonHashKey makeKey :: EgisonValue -> Either EgisonError EgisonHashKey fromCharValue :: WHNFData -> Either EgisonError Char fromStringValue :: WHNFData -> Either EgisonError String makeStringValue :: String -> EgisonValue fromBoolValue :: WHNFData -> Either EgisonError Bool fromRationalValue :: WHNFData -> Either EgisonError Rational 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 extractInteger :: EgisonValue -> EgisonM Integer 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 LoopContextConstant :: Binding -> Integer -> EgisonPattern -> EgisonPattern -> LoopContext LoopContextVariable :: Binding -> EgisonPattern -> EgisonPattern -> EgisonPattern -> LoopContext data EgisonError UnboundVariable :: Var -> EgisonError TypeMismatch :: String -> WHNFData -> EgisonError ArgumentsNum :: Int -> Int -> EgisonError NotImplemented :: String -> EgisonError Assertion :: String -> EgisonError Match :: String -> EgisonError Parser :: String -> EgisonError Desugar :: String -> EgisonError UserInterruption :: 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 Typeable EgisonError 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 MonadFresh EgisonM instance Show PrimitiveDataPattern instance Show EgisonExpr instance Show InnerExpr instance Show EgisonPattern instance Show LoopRange instance Show EgisonTopExpr 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 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 desugarPattern' :: EgisonPattern -> DesugarM EgisonPattern desugarLoopRange :: LoopRange -> DesugarM LoopRange 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 module Language.Egison.Parser readTopExprs :: String -> EgisonM [EgisonTopExpr] readTopExpr :: String -> EgisonM EgisonTopExpr readExprs :: String -> EgisonM [EgisonExpr] readExpr :: String -> EgisonM EgisonExpr loadFile :: FilePath -> EgisonM [EgisonTopExpr] loadLibraryFile :: FilePath -> EgisonM [EgisonTopExpr] parseTopExprs :: String -> Either EgisonError [EgisonTopExpr] parseTopExpr :: String -> Either EgisonError EgisonTopExpr parseExprs :: String -> Either EgisonError [EgisonExpr] parseExpr :: String -> Either EgisonError EgisonExpr module Language.Egison.Core evalTopExprs :: Env -> [EgisonTopExpr] -> EgisonM Env evalTopExpr :: Env -> EgisonTopExpr -> EgisonM Env 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) 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 primitiveEnvNoIO :: IO Env module Language.Egison version :: Version counter :: IORef Int fromEgisonM :: EgisonM a -> IO (Either EgisonError a) loadLibraries :: Env -> IO Env loadPrimitives :: Env -> IO Env loadEgisonFile :: Env -> FilePath -> IO (Either EgisonError Env) loadEgisonLibrary :: Env -> FilePath -> IO (Either EgisonError Env) evalEgisonExpr :: Env -> EgisonExpr -> IO (Either EgisonError EgisonValue) evalEgisonTopExpr :: Env -> EgisonTopExpr -> IO (Either EgisonError Env) evalEgisonTopExprs :: Env -> [EgisonTopExpr] -> IO (Either EgisonError Env) runEgisonTopExpr :: Env -> String -> IO (Either EgisonError Env) runEgisonTopExprs :: Env -> String -> IO (Either EgisonError Env)