packages feed

category-0.2.4.1: src/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 }

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

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

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