syntactic-0.7: Language/Syntactic/Constructs/Condition.hs
{-# LANGUAGE OverlappingInstances #-}
-- | Conditional expressions
module Language.Syntactic.Constructs.Condition where
import Data.Hash
import Data.Proxy
import Data.Typeable
import Language.Syntactic
import Language.Syntactic.Constructs.Symbol
data Condition ctx a
where
Condition :: Sat ctx a => Condition ctx (Bool :-> a :-> a :-> Full a)
instance WitnessCons (Condition ctx)
where
witnessCons Condition = ConsWit
instance WitnessSat (Condition ctx)
where
type SatContext (Condition ctx) = ctx
witnessSat Condition = SatWit
instance MaybeWitnessSat ctx (Condition ctx)
where
maybeWitnessSat = maybeWitnessSatDefault
instance MaybeWitnessSat ctx1 (Condition ctx2)
where
maybeWitnessSat _ _ = Nothing
instance IsSymbol (Condition ctx)
where
toSym Condition = Sym "condition" (\c t e -> if c then t else e)
instance ExprEq (Condition ctx) where exprEq = exprEqSym; exprHash = exprHashSym
instance Render (Condition ctx) where renderPart = renderPartSym
instance Eval (Condition ctx) where evaluate = evaluateSym
instance ToTree (Condition ctx)