Îõ³h$/      !"#$%&'()*+,-. Safe-InferredÖ× groupsA  G is Ù if there exists an element x of G such that for all y in G, there exists an n, such that  y = pow x ngroupsThe generator of the  group.groupsAn  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.groupsGenerate all elements of a  group using its .Note:2 Fuses, does not terminate even for finite groups.groups"Lazily generate all elements of a  group using its .Note:5 Fuses, terminates if the underlying group is finite. groups!Product of groups, Functor style. groups0, lifts groups pointwise (at only one point). groups1 lifts groups into a functor.groupsTrivial group, Functor style.  72      !"#$%&'()*+,-./01231451678#groups-0.5.2-DHfZnkORKVn2QhKR0j11aG Data.GroupCyclic generatorAbelianGroupinvert~~pow generated generated' $fGroupOp $fGroup:.: $fGroup:*:$fGroupIdentity $fGroupConst $fGroupProxy $fGroupDown $fGroup(,,,,) $fGroup(,,,) $fGroup(,,) $fGroup(,) $fGroup-> $fGroupDual$fGroupProduct $fGroupSum $fGroup() $fAbelianOp $fAbelian:.: $fAbelian:*:$fAbelianIdentity$fAbelianConst$fAbelianProxy $fAbelianDown$fAbelian(,,,,)$fAbelian(,,,) $fAbelian(,,) $fAbelian(,) $fAbelian-> $fAbelianDual$fAbelianProduct $fAbelianSum $fAbelian() $fCyclicDown$fCyclicIdentity $fCyclicConst $fCyclicProxy $fCyclicSum $fCyclic()baseGHC.BaseMonoidData.Functor.IdentityIdentityData.Functor.ConstConst