Ich versuchte this stackoverflow answer mit GHCI zu überprüfen und die folgenden Fehlermeldung erhalten:Fehler in GHCI, die ich nicht in schriftlicher Haskell-Datei wiedergeben
> import Data.List
> let m = head . sort
> m [2,3,4]
<interactive>:5:4:
No instance for (Num()) arising from the literal `2'
Possible fix: add an instance declaration for (Num())
In the expression: 2
In the first argument of `m', namely `[2, 3, 4]'
In the expression: m [2, 3, 4]
Leider kann ich den Fehler nicht in einer schriftlichen Haskell-Datei wiedergeben:
-- file.hs
import Data.List
main = do
let m = head . sort
putStrLn $ show $ m [2,3,4]
Das Ausführen dieser Datei mit runhaskell file.hs
gibt mir den erwarteten Wert 2
. Was ist mein Fehler in der Ghci-Sitzung?
Edit: ich festgestellt, dass die Funktion m
eine seltsame Art in GHCI hat:
> import Data.List
> let m = head . sort
> :t m
m :: [()] ->()
Warum ist dies der Fall? Sollte es nicht den Typ Ord a => [a] -> a
haben? Für sort
und head
ich die erwarteten Typen:
> :t sort
sort :: Ord a => [a] -> [a]
> :t head
head :: [a] -> a
Die gefürchtete Monomorhismus-Restriktion schlägt erneut zu. Versuchen Sie, eine ': set -XNoMonomorphismRestriction 'auszuführen, bevor Sie Ihren Code in ghci ausführen. – fjh
@fjh: Jetzt funktioniert es! Vielen Dank! –