{-# LANGUAGE TemplateHaskell #-}

-- | Conditional expressions

module Language.Syntactic.Constructs.Condition where



import Language.Syntactic



data Condition sig
  where
    Condition :: Condition (Bool :-> a :-> a :-> Full a)

instance Constrained Condition
  where
    {-# SPECIALIZE instance Constrained Condition #-}
    {-# INLINABLE exprDict #-}
    type Sat Condition = Top
    exprDict = const Dict

instance Semantic Condition
  where
    {-# SPECIALIZE instance Semantic Condition #-}
    {-# INLINABLE semantics #-}
    semantics Condition = Sem "condition" (\c t e -> if c then t else e)

semanticInstances ''Condition