Haskell: Wie man eine `Monoid`-Instanz für etwas schreibt, das von Parametern abhängt
Ich arbeite an einer kleinen Bibliothek für die Universität, die Ganzzahlberechnungen in einem @ durchführcyclic group; Dinge wie
(3 (% 11)) + (10 (% 11))
--> (2 (% 11))
'Ganzzahlen (% n)' bilden eindeutig ein Monoid unter Zugabe von '0 (% n)' als Identitätselement. Das Hinzufügen ist jedoch nur dann sinnvoll, wenn das Modulo der beiden hinzuzufügenden Operanden gleich ist:a (% n) + b (% n)
macht Sinn, währenda (% n) + b (% m)
nicht
ibt es eine Möglichkeit, dies mit Haskells Typsystem durchzusetzen? Gleiches gilt natürlich auch für dasmempty
identity element: Wie kann0 (% n)
gebaut werden? Könnenn
Irgendwie im Typensystem gehalten werden?
Oder erfordern solche Strukturen die Verwendung von abhängigen Typen?