23 lines
532 B
Haskell
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 }
|