úÎ!š 8(      !"#$%&'SafeUV á groupsA  G is Y if there exists an element x of G such that for all y in G, there exists an n, such that  y = pow x ngroupsAn  group is a  that follows the rule: a <> b == b <> agroupsA  is a ( plus a function,  , such that: a <> invert a == mempty invert a <> a == memptygroupsGroup subtraction: x ~~ y == x <> invert ygroups  a n == a <> a <> ... <> a  (n lots of a))If n is negative, the result is inverted. groups!Product of groups, Functor style. groups), lifts groups pointwise (at only one point). groups* lifts groups into a functor. groupsTrivial group, Functor style.7+      !"#$%&'()*+,*-.*/01!groups-0.5-Eg755ADexMbA9emZroPnWu Data.GroupCyclic generatorAbelianGroupinvert~~pow generated $fGroup:.: $fGroup:*:$fGroupIdentity $fGroupConst $fGroupProxy $fGroup(,,,,) $fGroup(,,,) $fGroup(,,) $fGroup(,) $fGroup-> $fGroupDual$fGroupProduct $fGroupSum $fGroup() $fAbelian:.: $fAbelian:*:$fAbelianIdentity$fAbelianConst$fAbelianProxy$fAbelian(,,,,)$fAbelian(,,,) $fAbelian(,,) $fAbelian(,) $fAbelian-> $fAbelianDual$fAbelianProduct $fAbelianSum $fAbelian()$fCyclicIdentity $fCyclicConst $fCyclicProxy $fCyclic()baseGHC.BaseMonoidData.Functor.IdentityIdentityData.Functor.ConstConst