From 1aa01a52b658755e6409a4c9ab3746df6e0504f1 Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Thu, 26 Nov 2020 12:27:42 -0800 Subject: [PATCH] Add type-level Equals for Boolean --- src/Type/Data/Boolean.purs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/Type/Data/Boolean.purs b/src/Type/Data/Boolean.purs index 0f064e5..4ea89fc 100644 --- a/src/Type/Data/Boolean.purs +++ b/src/Type/Data/Boolean.purs @@ -4,6 +4,8 @@ module Type.Data.Boolean , class IsBoolean , reflectBoolean , reifyBoolean + , class Equals + , equals , class And , and , class Or @@ -35,6 +37,17 @@ reifyBoolean :: forall r. Boolean -> (forall proxy o. IsBoolean o => proxy o -> reifyBoolean true f = f (Proxy :: Proxy True) reifyBoolean false f = f (Proxy :: Proxy False) +class Equals :: Boolean -> Boolean -> Boolean -> Constraint +class Equals lhs rhs out | lhs rhs -> out, lhs out -> rhs, rhs out -> lhs + +instance equalsTrueTrueTrue :: Equals True True True +else instance equalsTrueFalseFalse :: Equals True False False +else instance equalsFalseTrueFalse :: Equals False True False +else instance equalsFalseFalseTrue :: Equals False False True + +equals :: forall proxy l r o. Equals l r o => proxy l -> proxy r -> Proxy o +equals _ _ = Proxy + -- | And two `Boolean` types together class And :: Boolean -> Boolean -> Boolean -> Constraint class And lhs rhs out | lhs rhs -> out