2010-01-24 11 views

Odpowiedz

12

Możesz spróbować zrobić to przez ustawienie na nim punktu przerwania, więc funkcja znajduje się w zakresie od debuggera.

Sądzę również, że EclipseFP może powiedzieć Ci, co się dzieje, gdy myszkujesz nad nimi, przynajmniej przez pewien czas.

+3

Whoa, właśnie zdałem sobie sprawę, że punkty przerwania w przypadku opcji, po opublikowaniu zawiłe rozwiązanie połowiczne ... Wtedy zauważyłem tę odpowiedź. GHCi wypisuje typy wyrażeń w bieżącym zakresie, kiedy zatrzymuje się w punkcie przerwania bez żadnego specjalnego układania, więc jest to tylko kwestia umieszczenia. +1! –

+3

Dobra wskazówka, ale nie działa, jeśli kod nie zostanie skompilowany. Odpowiedź Toma może się przydać. –

21

Jest to szybki i brzydki hack, ale to, co zwykle zrobić, to po prostu użyć funkcji w niewłaściwy sposób i przeczytać komunikat o błędzie: wyjście

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 

Chociaż to opuszcza kontekst Num t =>, zwykle dostarcza mi wystarczających informacji, aby kontynuować.

+1

+1 Doskonały! To naprawdę pomogło mi zrozumieć definicję funkcji owłosionej! Uwaga: działa to *** *** dowolne wyrażenie w definicji funkcji. Na przykład, jeśli chcesz zobaczyć typ 'blah' w' f x = foo + blah', wykonaj - 'f x = foo + (niech exp = bla w exp :: Char)'. –

Powiązane problemy