Das folgende Programm erzeugt einen Fehler in ghci:
%Vor%Nämlich:
fromInteger.hs: 17: 16:
Keine Instanz für (Monoid Integer)
aus dem Literal1' at fromInteger.hs:17:16
fromInteger ': fromInteger 1 = one
Possible fix: add an instance declaration for (Monoid Integer)
In the pattern: 1
In the definition of
Wie kann ich es beheben, so dass 1 für Monoids in den Wert one
konvertiert werden kann? Alle anderen Ganzzahlen können (oder sollten) Prelude.undefined
ergeben, wenn sie auf (Monoid a) => fromInteger
angewendet werden.
Bitte seien Sie sich bewusst, dass ich das Gegenteil eines Experten von Haskell bin, also bitte verzeihen Sie mir, falls die Antwort offensichtlich ist.
Das Problem besteht darin, dass Sie (mit NoImplitPrelude) nur Ganzzahlliterale für Typen verwenden können, für die es eine fromInteger
-Funktion im Bereich gibt.
Sie können also in Ihrem Code nur Ganzzahlliterale verwenden, um Instanzen von Monoid
darzustellen, und da in Ihrem Code Integer
keine Instanz von Monoid
ist, können Sie das Literal 1
nicht zur Darstellung der Ganzzahl 1.
Um dies zu beheben, könnten Sie ein anderes Modul erstellen, das den Auftakt importiert und integerOne :: Integer = 1
definiert.
Sie könnten dann Ihre fromInteger
Funktion wie folgt definieren: