Like a Semigroup induces a Semigroupoid, a Group induces a Groupoid.
The first relation is captured by the instance: Semigroup m => Semigroupoid (Semi m) (link to Hackage docs), but there is no such relationship defined. It would be something like:
instance Group m => Groupoid (Semi m) where
inv (Semi n) = Semi (groupInv m)
I'm also missing a definition of Group among your packages.
I'm not asking this just so, but because I've run into an application where some concepts are naturally modeled using groupoids and groups (even though I'd need a slightly different definition).
Like a Semigroup induces a Semigroupoid, a Group induces a Groupoid.
The first relation is captured by the instance:
Semigroup m => Semigroupoid (Semi m)(link to Hackage docs), but there is no such relationship defined. It would be something like:I'm also missing a definition of Group among your packages.
I'm not asking this just so, but because I've run into an application where some concepts are naturally modeled using groupoids and groups (even though I'd need a slightly different definition).