{-# 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