monoids-in-the-category-of-.../src/Relation/Reflexive.hs

23 lines
532 B
Haskell

module Relation.Reflexive (Reflexive, Wide, idL, idR, id) where
import Relation.Base
import Data.Kind (Constraint)
type Reflexive :: Relation k -> Constraint
class Reflexive r where
idL :: r x y -> Object r x
default idL :: Wide r => r x y -> Object r x
idL _ = id
idR :: r x y -> Object r y
default idR :: Wide r => r x y -> Object r y
idR _ = id
type Wide :: Relation k -> Constraint
class Reflexive r => Wide r where
id :: r x x
instance Reflexive (->)
instance Wide (->) where { id = \x -> x }