2015-09-25 2 views
5

Quindi sono davvero nuovo per Haskell, ma mi sono divertito con la notazione point free e ho trovato questo problema. Sono nella console:Compilazione haskell point-free

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

ma negare prende un numero, quindi perché è esso che è costretto a un tipo intero?

risposta

7

Questo è un altro caso delle regole predefinite estese in GHCi. Do :set -XNoMonomorphismRestriction o fare semplicemente

> :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

Solo una nota, non è necessario l'immissione multi linea; puoi scrivere 'let x :: T; x = t'. – user2407038

+0

@ user2407038 Non ne hai bisogno, e puoi anche usare ': {' e ':}', ma preferisco ': set + m', è più come IPython fa l'input su più righe. – bheklilr