如何在Haskell中进行评估之前打印函数的参数?

时间:2017-03-09 16:38:31

标签: haskell

使用show之类的函数将评估打印前给出的任何表达式。如果我拨打show (12+4),则输出将为16。如何编写直接打印输出的函数,即使用12+4调用时将返回12+4(12+4)

谢谢

1 个答案:

答案 0 :(得分:0)

纯函数无法打印任何内容。要打印某些内容,函数必须在IO monad中返回一个值。

然而,我想你只想打印参数用于调试目的。对于这个特定的任务,有一个名为Debug.Trace.trace的实用程序函数就是这样做的。

典型用法如下:

import Debug.Trace

fib :: Int -> Int
fib n | trace ("fib input:" ++ show n) False = undefined
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

第一个分支“欺骗”GHC来评估trace ("fib input:" ++ show n) False,在打印一些调试输出后返回False。由于守卫是假的,= undefined部分将被忽略。

请勿将此功能用于除调试之外的任何其他功能。

您可能还想查看GHCi debugger以获取更高级的调试技巧。