使用show
之类的函数将评估打印前给出的任何表达式。如果我拨打show (12+4)
,则输出将为16
。如何编写直接打印输出的函数,即使用12+4
调用时将返回12+4
或(12+4)
谢谢
答案 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以获取更高级的调试技巧。