(************************************************************************) (* v * The Coq Proof Assistant / The Coq Development Team *) (* Setoid) := { fmap : Π {A B : Setoid}, (A ---> B) ---> F A ---> F B ; (* F_covariant :> Π [ SubSetoid A B ], SubSetoid (F A) (F B) ; *) fmap_id : Π {A}, fmap (idS (A:=A)) =∙= idS ; fmap_compose : Π {α β δ} (f : β --> δ) (g : α --> β), fmap (f ∙ g) =∙= fmap f ∙ fmap g }. Class Pointed `{F : Functor η} := { point : Π {α : Setoid}, α --> η α ; fmap_point : Π {α β : Setoid} (f : α --> β), fmap f ∙ point =∙= point ∙ f }. Class CoPointed `{F : Functor η} := { extract : Π {α}, η α --> α ; extract_fmap : Π {α β} (f : α --> β), extract ∙ fmap f =∙= f ∙ extract }. Implicit Arguments Pointed [[F]]. Implicit Arguments CoPointed [[F]].