Comonoid is the dual of Monoid, it can consume a value linearly and duplicate a value linearly
`comult` returns a pair instead of 2 copies, because we do not guarantee that the two values
are identical, unlike with `duplicate`. For example if we build a comonoid out of a group, with
comult returning both the element given and its inverse:
comult x = x # inverse x
It is not necessarily the case that x equals its inverse. For example the finite groupe of size
3, has 1 and 2 as inverses of each other wrt to addition, but are not the same.
Parameters: a
Methods:
counit : a -@ ()
comult : a -@ LPair a a
Implementation: Comonoid ((!*) a)