Safe Haskell | None |
---|---|
Language | Haskell2010 |
Definitions of data types for patterns, matchers, match clauses, matching states, and matching atoms.
Synopsis
- data Pattern a m ctx vs where
- 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
- class Matcher m a
- data MatchClause a m b = Matcher m a => MatchClause (Pattern a m '[] vs) (HList vs -> b)
- data MState vs where
- data MAtom ctx vs = Matcher m a => MAtom (Pattern a m ctx vs) m a
- data MList ctx vs where
- mappend :: MList ctx xs -> MList (ctx :++: xs) ys -> MList ctx (xs :++: ys)
- oneMAtom :: MAtom ctx xs -> MList ctx xs
- twoMAtoms :: MAtom ctx xs -> MAtom (ctx :++: xs) ys -> MList ctx (xs :++: ys)
- threeMAtoms :: MAtom ctx xs -> MAtom (ctx :++: xs) ys -> MAtom ((ctx :++: xs) :++: ys) zs -> MList ctx ((xs :++: ys) :++: zs)
- data HList xs where
- happend :: HList as -> HList bs -> HList (as :++: bs)
- type family (as :: [*]) :++: (bs :: [*]) :: [*] where ...
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 that is 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.
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. |
The Matcher
class is used to declare that m
is a matcher for data of a type a
.
Instances
Integral a => Matcher Integer a Source # | |
Defined in Control.Egison.Matcher | |
Matcher Eql a Source # | |
Defined in Control.Egison.Matcher | |
Matcher Something a Source # | |
Defined in Control.Egison.Matcher | |
Matcher m a => Matcher (Set m) [a] Source # | |
Defined in Control.Egison.Matcher | |
Matcher m a => Matcher (Multiset m) [a] Source # | |
Defined in Control.Egison.Matcher | |
Matcher m a => Matcher (List m) [a] Source # | |
Defined in Control.Egison.Matcher | |
(Matcher m1 a1, Matcher m2 a2) => Matcher (Pair m1 m2) (a1, a2) Source # | |
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
.
Matcher m a => MatchClause (Pattern a m '[] vs) (HList vs -> b) |
Matching states and matching atoms
A matching state. A matching state consists of an intermediate pattern-matching result and a stack of matching atoms.
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.
mappend :: MList ctx xs -> MList (ctx :++: xs) ys -> MList ctx (xs :++: ys) Source #
Concatenate two lists of matching atoms.
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
Heterogeneous lists.