Play with witnesses, kind of
This commit is contained in:
parent
347cc07c93
commit
424a688d15
|
@ -1,3 +1,4 @@
|
|||
{-# LANGUAGE FunctionalDependencies #-}
|
||||
module Function
|
||||
( concatStrings
|
||||
, concatTexts
|
||||
|
@ -77,15 +78,22 @@ lowerString :: TokenableTo String a => a -> DepGenM (Token String)
|
|||
lowerString a = runFunction LowerString =<< toToken a
|
||||
|
||||
|
||||
class WitnessFor w t | w -> t where
|
||||
emptyValue :: w -> t
|
||||
|
||||
data StringType = StringType
|
||||
instance WitnessFor StringType String where
|
||||
emptyValue StringType = ""
|
||||
|
||||
data ElemOf a = ElemOf a deriving (Show, Lift)
|
||||
instance (Show a, Lift a, Valuable a, Eq a) => IsFunction (ElemOf a) (a, [a]) Bool where
|
||||
evalFunction (ElemOf _) (y, ys) = y `elem` ys
|
||||
|
||||
elemOf :: (Show t, Lift t, Valuable t, Eq t, TokenableTo t a, TokenableTo [t] b) => t -> a -> b -> DepGenM (Token Bool)
|
||||
elemOf witness a b = runFunction (ElemOf witness) =<< toTupleToken a b
|
||||
elemOf :: (Show t, Lift t, Valuable t, Eq t, TokenableTo t a, TokenableTo [t] b, WitnessFor w t) => w -> a -> b -> DepGenM (Token Bool)
|
||||
elemOf witness a b = runFunction (ElemOf (emptyValue witness)) =<< toTupleToken a b
|
||||
|
||||
elemOfString :: (TokenableTo String a, TokenableTo [String] b) => a -> b -> DepGenM (Token Bool)
|
||||
elemOfString a b = elemOf "" a b
|
||||
elemOfString = elemOf StringType
|
||||
|
||||
|
||||
data MakeTemplate = MakeTemplate deriving (Show, Lift)
|
||||
|
|
Loading…
Reference in New Issue