mini-egison-0.1.3: Template Haskell Implementation of Egison Pattern Matching

Safe HaskellNone
LanguageHaskell2010

Control.Egison.Core

Contents

Synopsis

Patterns

data Pattern a m ctx vs where Source #

A pattern for data of a type a for a matcher m. ctx is an intermediate pattern-matching result and a type of a list of data bound in the left-side of the pattern. vs is a list of types bound to the pattern variables in this pattern.

Constructors

Wildcard :: Pattern a m ctx '[] 
PatVar :: String -> Pattern a m ctx '[a] 
AndPat :: Pattern a m ctx vs -> Pattern a m (ctx :++: vs) vs' -> Pattern a m ctx (vs :++: vs') 
OrPat :: Pattern a m ctx vs -> Pattern a m ctx vs -> Pattern a m ctx vs 
NotPat :: Pattern a m ctx '[] -> Pattern a m ctx '[] 
PredicatePat :: (HList ctx -> a -> Bool) -> Pattern a m ctx '[] 
Pattern :: Matcher m a => (HList ctx -> m -> a -> [MList ctx vs]) -> Pattern a m ctx vs

User-defined pattern; pattern is a function that takes a target, an intermediate pattern-matching result, and a matcher and returns a list of lists of matching atoms.

class Matcher m a Source #

m is a matcher for data of a type a.

Instances
Integral a => Matcher Integer a Source # 
Instance details

Defined in Control.Egison.Matcher

Matcher Eql a Source # 
Instance details

Defined in Control.Egison.Matcher

Matcher Something a Source # 
Instance details

Defined in Control.Egison.Matcher

Matcher m a => Matcher (Set m) [a] Source # 
Instance details

Defined in Control.Egison.Matcher

Matcher m a => Matcher (Multiset m) [a] Source # 
Instance details

Defined in Control.Egison.Matcher

Matcher m a => Matcher (List m) [a] Source # 
Instance details

Defined in Control.Egison.Matcher

(Matcher m1 a1, Matcher m2 a2) => Matcher (Pair m1 m2) (a1, a2) Source # 
Instance details

Defined in Control.Egison.Matcher

data MatchClause a m b Source #

A match clause of a match expression whose target data is a and matcher is m. The body of the match clause is evaluated to b.

Constructors

Matcher m a => MatchClause (Pattern a m '[] vs) (HList vs -> b) 

Matching states and matching atoms

data MState vs where Source #

A matching state. A matching state consists of an intermediate pattern-matching result and a stack of matching atoms.

Constructors

MState :: vs ~ (xs :++: ys) => HList xs -> MList xs ys -> MState vs 

data MAtom ctx vs Source #

A matching atom. ctx is a intermediate pattern-matching result. vs is a list of types bound to the pattern variables by processing this matching atom.

Constructors

Matcher m a => MAtom (Pattern a m ctx vs) m a 

data MList ctx vs where Source #

A stack of matching atoms

Constructors

MNil :: MList ctx '[] 
MCons :: MAtom ctx xs -> MList (ctx :++: xs) ys -> MList ctx (xs :++: ys) 

mappend :: MList ctx xs -> MList (ctx :++: xs) ys -> MList ctx (xs :++: ys) Source #

Concatenate two lists of matching atoms.

oneMAtom :: MAtom ctx xs -> MList ctx xs Source #

Create a list of a single matching atom.

twoMAtoms :: MAtom ctx xs -> MAtom (ctx :++: xs) ys -> MList ctx (xs :++: ys) Source #

Create a list of two matching atoms.

threeMAtoms :: MAtom ctx xs -> MAtom (ctx :++: xs) ys -> MAtom ((ctx :++: xs) :++: ys) zs -> MList ctx ((xs :++: ys) :++: zs) Source #

Create a list of three matching atoms.

Heterogeneous lists

data HList xs where Source #

Heterogeneous list.

Constructors

HNil :: HList '[] 
HCons :: a -> HList as -> HList (a ': as) 

happend :: HList as -> HList bs -> HList (as :++: bs) Source #

Concatenate two heterogeneous lists.

type family (as :: [*]) :++: (bs :: [*]) :: [*] where ... Source #

Equations

as :++: '[] = as 
'[] :++: bs = bs 
(a ': as) :++: bs = a ': (as :++: bs)