2011-12-04 14 views
8

私はHaskellを初めて使っていますが、Haskellの関数内に 'debug'行を出力する方法があるのでしょうか? I.私はプログラミングの経験があるが、これは近くに関数型プログラミングを行く私は初めてなので、任意の助けが理解されるであろう私の現在のコードはHaskell Print lines in function

import Prelude 

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

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

ある

関数に値が入力されているものをデバッグしたいです。

答えて

16

あなたが探しているのはDebug.Trace.traceです。

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

は、第2引数を返す前に第1引数を出力する関数です。しかし、それは明確に透明ではないので、デバッグにのみ使用するべきです。

また、カスケードはHaskellでの関数適用には使用されず、グループ化のためにのみ使用されています。

+0

おかげで(もDebug.Traceから、と単純に定義された)traceShowを使用することができます!私はgoogleに「show」が何であるか – AlanFoster

+0

@ user551841、 'show'は(printなどの)値の文字列表現を生成します。 –

+12

@ user551841:Google、[Hoogle](http://www.haskell.org/hoogle/?hoogle=show)を使用しないでください。これはHaskellのドキュメンテーションのための特殊な検索エンジンであり、_ type_という関数を検索できる独特の機能を持っています。あなたがハスケルに入っているなら、あなたはそれを知っているかもしれません。 – hammar

7

traceの@のHAMMARの提案に加えて、あなたは非常に多くの

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