packages feed

category-0.1.1.0: Data/Morphism/Endo.hs

module Data.Morphism.Endo where

import Algebra as A
import Control.Category.Groupoid as C

newtype Endo s a = Endo { endo :: s a a }
  deriving (Typeable)

instance Category s => Semigroup (Endo s a) where
    Endo f <> Endo g = Endo (f . g)

instance Category s => Monoid (Endo s a) where
    mempty = Endo id

instance Groupoid s => Group (Endo s a) where
    invert (Endo f) = Endo (C.invert f)