module Control.Egison.Matcher
( Pattern
, Matcher
, Something(..)
, ValuePattern(..)
, Eql(..)
)
where
import Control.Monad ( MonadPlus(..) )
type Pattern ps im it ot = ps -> im -> it -> [ot]
class Matcher m tgt
data Something = Something
instance Matcher Something a
class Eq t => ValuePattern m t where
value :: t -> Pattern () m t ()
default value :: Eq t => t -> Pattern () m t ()
value t
e () m
_ t
v = if t
e t -> t -> Bool
forall a. Eq a => a -> a -> Bool
== t
v then () -> [()]
forall a. a -> [a]
forall (f :: * -> *) a. Applicative f => a -> f a
pure () else [()]
forall a. [a]
forall (m :: * -> *) a. MonadPlus m => m a
mzero
valueM :: m -> t -> ()
default valueM :: m -> t -> ()
valueM m
_ t
_ = ()
data Eql = Eql
instance Eq a => Matcher Eql a
instance Eq a => ValuePattern Eql a