我有问题弄清楚这是否可行。任何指针都很棒
我不确定确切的语法,但类似
m = 3
d = putStr "d"
f = d ; m
这样它会调用函数d
,并返回m
中的值而不是Maybe m
?
修改
我在找什么更像是这样?
eval s = s
m = 3
f = (eval s) ; m
答案 0 :(得分:6)
如果调用包含在monad中的函数(在本例中为IO),那么您还必须在IO monad中。因此,monad的规则 - 永远不会被打破。
m :: Int
m = 3
d :: IO ()
d = putStr "d"
f :: IO Int
f = do d -- Teehee, doodie.
return m
答案 1 :(得分:3)
如果您想以printf
方式调试程序,请使用Debug.Trace
模块。
否则请参阅上面的Clark Gaebel的回复 - 你不能从IO
函数中获得纯(非IO
)值,putStr
只能在IO
中使用{{1}}函数。
¹实际上有时你可以,但这是一件复杂的事情