这是我的功能:
foo :: Int -> Int
foo i = do
putStrLn "Foo Function has run!"
return (i*2)
上面有编译时错误。
如果我这样做,我希望如此:
bar = foo 6
bar将是12。
但是当首次运行该函数时,它会输出字符串“Foo Function has run!” 我怎么能这样做?
答案 0 :(得分:8)
您必须将该功能转换为IO操作。 Haskell严格强制您将执行IO的代码与不具有代码的代码分开:
foo :: Int -> IO Int
foo i = do
putStrLn "Foo Function has run!"
return (i * 2)
然后,您可以在另一个IO
函数中提取此值:
main :: IO ()
main = do
bar1 <- foo 6
bar2 <- foo bar1
print (bar1, bar2)
Haskell选择这条路线的原因有很多种,但有些重要的(没有特别的顺序)是:
答案 1 :(得分:0)
请放心,使用trace :: String -> a -> a
中的Debug.Trace