12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182{-# OPTIONS --without-K #-}module Class.Monoid.Instances where open import Class.Preludeopen import Class.Semigroupopen import Class.Monoid.Core instance Monoid-List : Monoid (List A) Monoid-List .ε = [] MonoidLaws-List : MonoidLaws≡ (List A) MonoidLaws-List .ε-identity = L.++-identityˡ , L.++-identityʳ where import Data.List.Properties as L Monoid-Vec : Monoid (∃ (Vec A)) Monoid-Vec .ε = 0 , [] Monoid-String : Monoid String Monoid-String .ε = "" module _ ⦃ _ : Semigroup A ⦄ ⦃ _ : Monoid A ⦄ where instance Monoid-Maybe : Monoid (Maybe A) Monoid-Maybe .ε = nothing MonoidLaws-Maybe : ⦃ MonoidLaws≡ A ⦄ → MonoidLaws≡ (Maybe A) MonoidLaws-Maybe .ε-identity = p , q where open Alg≡ p = LeftIdentity ε _◇_ ∋ λ _ → refl q = RightIdentity ε _◇_ ∋ λ where (just _) → refl; nothing → refl -- ** natural numbersmodule _ where open import Data.Nat.Properties module _ where instance _ = Semigroup-ℕ-+ Monoid-ℕ-+ = Monoid ℕ ∋ λ where .ε → 0 instance _ = Monoid-ℕ-+ MonoidLaws-ℕ-+ = MonoidLaws≡ ℕ ∋ record {ε-identity = +-identityˡ , +-identityʳ} module _ where instance _ = Semigroup-ℕ-* Monoid-ℕ-* = Monoid ℕ ∋ λ where .ε → 1 instance _ = Monoid-ℕ-* MonoidLaws-ℕ-* = MonoidLaws≡ ℕ ∋ record {ε-identity = *-identityˡ , *-identityʳ} -- ** natural numbersmodule _ where open import Data.Nat.Binary open import Data.Nat.Binary.Properties instance _ = Semigroup-ℕᵇ-+ Monoid-ℕᵇ-+ = Monoid ℕᵇ ∋ λ where .ε → zero instance _ = Monoid-ℕᵇ-+ MonoidLaws-ℕᵇ-+ = MonoidLaws≡ ℕᵇ ∋ record {ε-identity = +-identityˡ , +-identityʳ} -- ** integersmodule _ where open import Data.Integer.Properties module _ where instance _ = Semigroup-ℤ-+ Monoid-ℤ-+ = Monoid ℤ ∋ λ where .ε → 0ℤ instance _ = Monoid-ℤ-+ MonoidLaws-ℤ-+ = MonoidLaws≡ ℤ ∋ record {ε-identity = +-identityˡ , +-identityʳ} module _ where instance _ = Semigroup-ℤ-* Monoid-ℤ-* = Monoid ℤ ∋ λ where .ε → 1ℤ instance _ = Monoid-ℤ-* MonoidLaws-ℤ-* = MonoidLaws≡ ℤ ∋ record {ε-identity = *-identityˡ , *-identityʳ} -- ** maybesmodule _ ⦃ _ : Semigroup A ⦄ ⦃ _ : Monoid A ⦄ ⦃ _ : MonoidLaws≡ A ⦄ (x : A) where just-◇ˡ : ∀ (mx : Maybe A) → just x ◇ mx ≡ just (x ◇ fromMaybe ε mx) just-◇ˡ = λ where (just _) → refl nothing → cong just $ sym $ ε-identityʳ≡ x just-◇ʳ : ∀ (mx : Maybe A) → mx ◇ just x ≡ just (fromMaybe ε mx ◇ x) just-◇ʳ = λ where (just _) → refl nothing → cong just $ sym $ ε-identityˡ≡ x