2015-09-25 12 views
5

Tak więc jestem naprawdę nowy dla Haskella, ale grałem z notacją punktową i natrafiłem na ten problem. Jestem w konsoli:Kompilacja bez punktu Haskella typu

> let c = (.)negate 
> :t c 
> (a -> Integer) -> a -> Integer -> a 

ale negate bierze numer, więc dlaczego jest ograniczony do typu Integer?

Odpowiedz

7

Jest to kolejny przypadek rozszerzonych reguł dotyczących niewykonania zobowiązań w GHCi. Wykonaj :set -XNoMonomorphismRestriction lub po prostu wykonaj:

> :set +m -- multiline input in GHCi 
> let c :: (Num a) => (b -> a) -> b -> a -> b 
|  c = (.) negate 
| 
> :t c 
Num a => (b -> a) -> b -> a -> b 
+2

Wystarczy notatkę, nie potrzebujesz wielowierszowego wejścia; możesz napisać 'let x :: T; x = t'. – user2407038

+0

@ user2407038 Nie potrzebujesz tego, możesz też użyć ': {' i ':}', ale ja wolę ': set + m', bardziej przypomina to, jak IPython robi wielowierszowe dane wejściowe. – bheklilr

Powiązane problemy