如何调用函数并在haskell中返回不同的值? (没有单子)

时间:2012-02-10 06:45:31

标签: haskell functional-programming

我有问题弄清楚这是否可行。任何指针都很棒

我不确定确切的语法,但类似

m = 3
d = putStr "d"
f = d ; m

这样它会调用函数d,并返回m中的值而不是Maybe m

修改

我在找什么更像是这样?

eval s = s
m = 3
f = (eval s) ; m

2 个答案:

答案 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}}函数。


¹实际上有时你可以,但这是一件复杂的事情