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?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage