/* * Copyright 2022 Jakob Schneider Villumsen * * Use of this source code is governed by the Apache 2.0 license * that can be found in the LICENSE.md file. */////// Trait for types that form a commutative group, and its functions.///pubmod CommutativeGroup {////// Trait for types that form a commutative group.////// A commutative group (abelian group) is a group where the `combine` function is commutative.////// The default instances for number define the additive inverse in the real numbers.///pubtraitCommutativeGroup[a] withGroup[a], CommutativeMonoid[a] {}instanceCommutativeGroup[Unit]instanceCommutativeGroup[Int8]instanceCommutativeGroup[Int16]instanceCommutativeGroup[Int32]instanceCommutativeGroup[Int64]instanceCommutativeGroup[BigInt]instanceCommutativeGroup[Float32]instanceCommutativeGroup[Float64]instanceCommutativeGroup[BigDecimal]instanceCommutativeGroup[(a1, a2)] withCommutativeGroup[a1], CommutativeGroup[a2]instanceCommutativeGroup[(a1, a2, a3)] withCommutativeGroup[a1], CommutativeGroup[a2], CommutativeGroup[a3]instanceCommutativeGroup[(a1, a2, a3, a4)] withCommutativeGroup[a1], CommutativeGroup[a2], CommutativeGroup[a3], CommutativeGroup[a4]instanceCommutativeGroup[(a1, a2, a3, a4, a5)] withCommutativeGroup[a1], CommutativeGroup[a2], CommutativeGroup[a3], CommutativeGroup[a4], CommutativeGroup[a5]instanceCommutativeGroup[(a1, a2, a3, a4, a5, a6)] withCommutativeGroup[a1], CommutativeGroup[a2], CommutativeGroup[a3], CommutativeGroup[a4], CommutativeGroup[a5], CommutativeGroup[a6]instanceCommutativeGroup[(a1, a2, a3, a4, a5, a6, a7)] withCommutativeGroup[a1], CommutativeGroup[a2], CommutativeGroup[a3], CommutativeGroup[a4], CommutativeGroup[a5], CommutativeGroup[a6], CommutativeGroup[a7]instanceCommutativeGroup[(a1, a2, a3, a4, a5, a6, a7, a8)] withCommutativeGroup[a1], CommutativeGroup[a2], CommutativeGroup[a3], CommutativeGroup[a4], CommutativeGroup[a5], CommutativeGroup[a6], CommutativeGroup[a7], CommutativeGroup[a8]instanceCommutativeGroup[(a1, a2, a3, a4, a5, a6, a7, a8, a9)] withCommutativeGroup[a1], CommutativeGroup[a2], CommutativeGroup[a3], CommutativeGroup[a4], CommutativeGroup[a5], CommutativeGroup[a6], CommutativeGroup[a7], CommutativeGroup[a8], CommutativeGroup[a9]instanceCommutativeGroup[(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)] withCommutativeGroup[a1], CommutativeGroup[a2], CommutativeGroup[a3], CommutativeGroup[a4], CommutativeGroup[a5], CommutativeGroup[a6], CommutativeGroup[a7], CommutativeGroup[a8], CommutativeGroup[a9], CommutativeGroup[a10]}