Safe Haskell | Safe-Inferred |
---|

These algebraic structures have sacrificed generality in favor of being easily used with the standard Haskell Prelude. The fact that monoids are not guaranteed to be semigroups makes this difficult.

- class Semigroup g => RegularSemigroup g where
- inverse :: g -> g

- class (RegularSemigroup g, Monoid g) => Group g
- data RegularSemigroup sg => RegSG2Group sg
- module Data.Semigroup

# Type classes

class Semigroup g => RegularSemigroup g whereSource

Semigroups that also have an inverse. See https://en.wikipedia.org/wiki/Regular_semigroup

(Semigroup (RegSG2Group sg), RegularSemigroup sg) => RegularSemigroup (RegSG2Group sg) |

class (RegularSemigroup g, Monoid g) => Group g Source

Regular semigroups that also have an identity; alternatively, monoids where every element has a unique inverse. See https://en.wikipedia.org/wiki/Group_(mathematics)

(RegularSemigroup (RegSG2Group sg), Monoid (RegSG2Group sg), RegularSemigroup sg) => Group (RegSG2Group sg) |

# Free Structures

data RegularSemigroup sg => RegSG2Group sg Source

Convert any regular semigroup into a group (and thus also a monoid) by adding a unique identity element

(Eq sg, RegularSemigroup sg) => Eq (RegSG2Group sg) | |

(Eq (RegSG2Group sg), Ord sg, RegularSemigroup sg) => Ord (RegSG2Group sg) | |

(Read sg, RegularSemigroup sg) => Read (RegSG2Group sg) | |

(Show sg, RegularSemigroup sg) => Show (RegSG2Group sg) | |

RegularSemigroup sg => Monoid (RegSG2Group sg) | |

RegularSemigroup sg => Semigroup (RegSG2Group sg) | |

(RegularSemigroup (RegSG2Group sg), Monoid (RegSG2Group sg), RegularSemigroup sg) => Group (RegSG2Group sg) | |

(Semigroup (RegSG2Group sg), RegularSemigroup sg) => RegularSemigroup (RegSG2Group sg) |

module Data.Semigroup