{-# LANGUAGE AllowAmbiguousTypes #-} module Pandora.Paradigm.Controlflow.Effect.Conditional where import Pandora.Paradigm.Primary.Object.Boolean (Boolean (True, False)) import Pandora.Paradigm.Primary.Functor.Maybe (Maybe (Just, Nothing)) class Conditional prompt clause where iff :: clause -> a -> a -> a instance Conditional True Boolean where iff :: Boolean -> a -> a -> a iff Boolean True a x a _ = a x iff Boolean False a _ a y = a y instance Conditional False Boolean where iff :: Boolean -> a -> a -> a iff Boolean False a x a _ = a x iff Boolean True a _ a y = a y instance Conditional Just (Maybe a) where iff :: Maybe a -> a -> a -> a iff (Just a _) a x a _ = a x iff Maybe a Nothing a _ a y = a y instance Conditional Nothing (Maybe a) where iff :: Maybe a -> a -> a -> a iff Maybe a Nothing a x a _ = a x iff (Just a _) a _ a y = a y