module Freelude.Impl.CategoryAsMonoid (
CategoryAsMonoid(getCategoryAsMonoid)
) where
import Prelude hiding ((.), id)
import Freelude.Impl.Category
import Data.Semigroup (Semigroup((<>)))
newtype CategoryAsMonoid a = CategoryAsMonoid { getCategoryAsMonoid :: a }
instance (IsSemigroupoid t p a a) => Semigroup (CategoryAsMonoid t) where
CategoryAsMonoid x <> CategoryAsMonoid y = CategoryAsMonoid (x . y)
instance (IsCategory t p a a, ExoIsCategory t p a a) => Monoid (CategoryAsMonoid t) where
mempty = CategoryAsMonoid id
mappend = (<>)