Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Post History
Is this for purely technical reasons as there would have to be at least 2 Semigroup instances (for addition and multiplication), but type classes cannot be implemented multiple times for the same...
Answer
#1: Initial revision
> Is this for purely technical reasons as there would have to be at least 2 Semigroup instances (for addition and multiplication), but type classes cannot be implemented multiple times for the same type? Yes, basically this. When there is more than one plausible way to interpret a type as an instance of a class, and no reason to strongly favor one over the others, the typical thing to do is to create newtypes for each possible interpretation and define instances on the newtypes. That way the user can specify which instance to use by wrapping and unwrapping a particular newtype. For `Int` (or any other type with a `Semiring` instance), you can use the [`Additive`](https://pursuit.purescript.org/packages/purescript-prelude/6.0.1/docs/Data.Monoid.Additive#t:Additive) and [`Multiplicative`](https://pursuit.purescript.org/packages/purescript-prelude/6.0.1/docs/Data.Monoid.Multiplicative) types to get those two semigroups.