Ich habe die folgende Funktion, um die Faktor-Paare für eine bestimmte AnzahlMehrdeutige Typ Variable `a0' die sich aus einer Verwendung von` es
factorPairs:: (RealFrac a, Floating a, Integral a) => a -> [(a, a)]
factorPairs n = map(\x -> (x, div n x)) [y | y <- [1..(ceiling $ sqrt n)], n `rem` y == 0]
zurückzukehren Wenn ich die Funktion in GHCI nennen factorPairs 18
Ich erhalte ein Laufzeitfehler von
* Ambiguous type variable `a0' arising from a use of `it'
prevents the constraint `(Floating a0)' from being solved.
Probable fix: use a type annotation to specify what `a0' should be.
These potential instances exist:
instance Floating Double -- Defined in `GHC.Float'
instance Floating Float -- Defined in `GHC.Float'
* In the first argument of `print', namely `it'
In a stmt of an interactive GHCi command: print it
ich die Funktion in GHCI hart codieren können
map(\x -> (x, div 18 x)) [y | y <- [1..(ceiling $ sqrt 18)], 18 `rem` y == 0]
und haben keine Probleme, aber ich kann nicht scheinen, um herauszufinden, warum meine Funktion fehlschlägt. Ich glaube, dass Ghci versucht, mir zu sagen, dass es nicht herausfinden kann, welcher Typ print
mit anrufen soll, aber ich kämpfe, um die Lösung zu finden.
Try „: t Karte (\ x -> (x, div 18 x)) [y | y <- [1 .. (Decke $ sqrt 18)], 18' rem' y == 0 ] "auf GHCi, um den abgeleiteten Typ herauszufinden. – Mephy
Sie sollten Ihre Typ-Signatur überdenken. Können Sie einen Typ angeben, der sowohl "Floating" als auch "Integral" ist? Ich schlage vor, dass Sie die Funktion monomorph machen, ex "Double" verwenden und nur bei Bedarf verallgemeinern. –
@ ThomasM.DuBuisson Ich habe darüber eigentlich zum Spaß nachgedacht: Gibt es jemals einen _reasonable_ Typ, der sowohl 'Floating' als auch' Integral' ist? Gibt es auch eine Möglichkeit, auf der Basis von Instanzen nach Arten zu suchen, wie wir mit hoogle oder hayoo nach Funktionen auf der Basis von Typen suchen können? – Alec