2011-12-04 10 views
8

Jestem nowy w Haskell i zastanawiam się, czy istnieje sposób na wyprowadzenie "debugowania" linii w funkcji w Haskell? TO ZNACZY. Chcę debugowania jakie wartości są wprowadzane do funkcjiHaskell Print Lines w funkcji

Mój obecny kod jest

import Prelude 

foo(a,b,c) 
    print("input a : " ++ a) 
    = a + b + c 

main = print(foo(1, 2, 3)) 

Mam doświadczenie z programowaniem, ale jest to mój pierwszy raz w pobliżu programowania funkcyjnego, więc każda pomoc będzie mile widziane .

Odpowiedz

16

Poszukujesz Debug.Trace.trace.

import Debug.Trace 
foo a b c = trace ("input a: " ++ show a) (a + b + c) 
main = print (foo 1 2 3) 

trace to funkcja, która drukuje swój pierwszy argument przed powrotem swój drugi. Jednak nie jest to przejrzyste, więc powinno być używane tylko do debugowania.

Należy również pamiętać, że nawiasy nie są używane do stosowania funkcji w Haskell, tylko do grupowania.

+0

dzięki bardzo! Idę do Google'a, co "show" ma teraz – AlanFoster

+0

@ user551841, 'show' tworzy ciąg znaków reprezentujących wartość (dla drukowania i inne). –

+12

@ user551841: Nie Google, [Hoogle] (http://www.haskell.org/hoogle/?hoogle=show)! Jest to wyspecjalizowana wyszukiwarka do dokumentacji Haskell i ma dość unikalną funkcję wyszukiwania funkcji _by typ_. Jeśli dostaniesz się do Haskell, równie dobrze możesz się z nim zapoznać. – hammar

7

Oprócz sugestii @ hammar dnia trace, można użyć traceShow (również z Debug.Trace, i po prostu zdefiniowane)

import Debug.Trace (traceShow) 
foo a b c = traceShow (a, b, c) (a + b + c) 
main = print (foo 1 2 3)