2010-01-24 8 views

risposta

12

Si potrebbe provare a farlo impostando un punto di interruzione su di esso, quindi la funzione è in ambito dal debugger.

Inoltre, penso che EclipseFP possa dirvi il tipo di cose quando vi passate sopra con il mouse, almeno una parte del tempo.

+3

Whoa, ho appena capito che i punti di interruzione erano un'opzione, dopo aver postato una soluzione semicotta e contorta ... Poi ho notato questa risposta. GHCi stampa i tipi di espressioni nell'ambito corrente quando si ferma a un punto di interruzione senza alcun pungolo speciale, quindi è solo una questione di posizionamento. +1! –

+3

Suggerimento, ma non funziona se il codice non viene compilato. La risposta di Tom può tornare utile. –

21

Questo è un hack rapido e brutto, ma quello che di solito fare è semplicemente usare la funzione nel modo sbagliato e leggere il messaggio di errore: uscita

inc x = x + 1 
    where 
    f (y, z) = y + z 
    g = f :: Char 

GHCi:

Couldn't match expected type `Char' 
     against inferred type `(t, t) -> t' 
In the expression: f :: Char 

Anche se questo lascia fuori il contesto Num t =>, questo di solito mi fornisce abbastanza informazioni per continuare.

+1

+1 Eccellente! Questo mi ha davvero aiutato a capire una definizione di funzione pelosa! Nota: funziona su *** qualsiasi espressione *** nella definizione della funzione. Per esempio se vuoi vedere il tipo di 'blah' in' f x = foo + blah', do - 'f x = pippo + (lascia exp = blah in exp :: Char)'. –

Problemi correlati