Es stellt sich heraus, dass in GHC 7.10, diese fein kompiliert:Warum führt die freie Version der Funktion von Haskell zu einem mehrdeutigen Typfehler?
mysum xs = foldr (+) 0 xs
Aber diese:
mysum = foldr (+) 0
Ergebnisse in dem folgenden Fehler:
No instance for (Foldable t0) arising from a use of ‘foldr’
The type variable ‘t0’ is ambiguous
Relevant bindings include
mysum :: t0 Integer -> Integer (bound at src/Main.hs:37:1)
Note: there are several potential instances:
instance Foldable (Either a) -- Defined in ‘Data.Foldable’
instance Foldable Data.Functor.Identity.Identity
-- Defined in ‘Data.Functor.Identity’
instance Foldable Data.Proxy.Proxy -- Defined in ‘Data.Foldable’
...plus five others
In the expression: foldr (+) 0
In an equation for ‘mysum’: mysum = foldr (+) 0
Warum dies geschieht, und Was ist die Erkenntnis, die durch das Verständnis dieses Unterschieds erreicht wird? Kann ich dieser Funktion auch einen Typ geben (der immer noch generisch ist), damit dieser Fehler verschwindet?
* Die gefürchtete Monomorphie Einschränkung schlägt wieder * – AJFarmar
Ich dachte, , in neueren GHC wurde die Monomorphie-Beschränkung standardmäßig deaktiviert? – arrowd
@arrowdodger, Sie haben einen Buchstaben verpasst: In der letzten GHCi ist die Monomorphie-Beschränkung standardmäßig deaktiviert. –