Próbowałem sprawdzić this stackoverflow answer z ghci i pojawia się następujący błąd:Błąd w ghci których nie można odtworzyć w formie pisemnej pliku Haskell
> 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]
Niestety nie mogę odtworzyć błąd w pisemnym pliku Haskell:
-- file.hs
import Data.List
main = do
let m = head . sort
putStrLn $ show $ m [2,3,4]
Uruchomienie tego pliku z runhaskell file.hs
daje mi oczekiwaną wartość 2
. Jaki jest mój błąd w sesji ghci?
Edit: Zauważyłam, że funkcja m
ma dziwny typ w ghci:
> import Data.List
> let m = head . sort
> :t m
m :: [()] ->()
Dlaczego tak się dzieje? Czy nie powinien on mieć typu Ord a => [a] -> a
? Dla sort
i head
uzyskać oczekiwane typy:
> :t sort
sort :: Ord a => [a] -> [a]
> :t head
head :: [a] -> a
Obrzydliwe ograniczenie monomorystyki uderza ponownie. Spróbuj wykonać ': set -XNoMonomorphismRestriction' przed uruchomieniem swojego kodu w ghci. – fjh
@fjh: Teraz działa! Dzięki! –