agda2hs-1.3: lib/Haskell/Law/Semigroup/Def.agda
module Haskell.Law.Semigroup.Def where
open import Haskell.Prim
open import Haskell.Prim.Tuple
open import Haskell.Prim.Monoid
record IsLawfulSemigroup (a : Set) ⦃ iSemigroupA : Semigroup a ⦄ : Set₁ where
field
-- Associativity: x <> (y <> z) = (x <> y) <> z
associativity : (x y z : a) → x <> (y <> z) ≡ (x <> y) <> z
open IsLawfulSemigroup ⦃ ... ⦄ public
postulate instance
iLawfulSemigroupFun : ⦃ iSemB : Semigroup b ⦄ → ⦃ IsLawfulSemigroup b ⦄ → IsLawfulSemigroup (a → b)
iLawfulSemigroupUnit : IsLawfulSemigroup ⊤
iLawfulSemigroupTuple₂ : ⦃ iSemA : Semigroup a ⦄ ⦃ iSemB : Semigroup b ⦄
→ ⦃ IsLawfulSemigroup a ⦄ → ⦃ IsLawfulSemigroup b ⦄
→ IsLawfulSemigroup (a × b)
iLawfulSemigroupTuple₃ : ⦃ iSemA : Semigroup a ⦄ ⦃ iSemB : Semigroup b ⦄ ⦃ iSemC : Semigroup c ⦄
→ ⦃ IsLawfulSemigroup a ⦄ → ⦃ IsLawfulSemigroup b ⦄ → ⦃ IsLawfulSemigroup c ⦄
→ IsLawfulSemigroup (a × b × c)