如何在函数中间输出某些内容,但仍返回IO()以外的内容?
f :: Int -> Int
f n = do
print n
n + 1
Run Code Online (Sandbox Code Playgroud)
谢谢
f消耗一个Int; 它会产生IO动作
f n = print n >> return ( n + 1) :: IO Int
Run Code Online (Sandbox Code Playgroud)
只能用于调试目的,可以使用trace函数。如果您确实想产生输出,请使用IO。
import Debug.Trace
f :: Int -> Int
f n = trace (show n) (n + 1)
Run Code Online (Sandbox Code Playgroud)
trace 本质上是一个不纯函数,它将其参数写入标准错误并返回标识函数。
要正确使用IO,请将类型更改为Int -> IO Int。
f :: Int -> IO Int
f n = do
print n
return (n + 1)
Run Code Online (Sandbox Code Playgroud)