{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE EmptyDataDeriving #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE DefaultSignatures #-}
module OAlg.Data.EqualExtensional
( EqExt(..), prpEqualExt
)
where
import OAlg.Data.Show
import OAlg.Data.X
import OAlg.Data.Equal
import OAlg.Data.Statement.Definition
infix 4 .=.
class EqExt c where
(.=.) :: c x y -> c x y -> Statement
default (.=.) :: Eq2 c => c x y -> c x y -> Statement
c x y
f .=. c x y
g = c x y -> c x y -> Bool
forall x y. c x y -> c x y -> Bool
forall (h :: * -> * -> *) x y. Eq2 h => h x y -> h x y -> Bool
eq2 c x y
f c x y
g Bool -> Message -> Statement
:?> [Parameter] -> Message
Params []
prpEqualExt :: (Show x, Eq y) => X x -> (x -> y) -> (x -> y) -> Statement
prpEqualExt :: forall x y.
(Show x, Eq y) =>
X x -> (x -> y) -> (x -> y) -> Statement
prpEqualExt X x
xx x -> y
f x -> y
g = String -> Label
Prp String
"ExtensionalEqual" Label -> Statement -> Statement
:<=>: X x -> (x -> Statement) -> Statement
forall x. X x -> (x -> Statement) -> Statement
Forall X x
xx
(\x
x -> (x -> y
f x
x y -> y -> Bool
forall a. Eq a => a -> a -> Bool
== x -> y
g x
x) Bool -> Message -> Statement
:?> [Parameter] -> Message
Params [String
"x"String -> String -> Parameter
:=x -> String
forall a. Show a => a -> String
show x
x]
)