我正在编写这样的函数。
func :: IO()
func = putStr print "func = putStr print"
我知道这是不正确的,但我的想法是我希望putStr
应用到字符串上,然后print
应用到同一个字符串上"fun = .."
,这样输出将是:
func = putStr print "func = putStr print"
这与我的函数定义相同。谢谢
如果您的目标是编写一个quine(本文中也给出了另一个 Haskell 示例),您可以使用 lambda 表示法来捕获变量。
func = (\x -> putStr x >> print x) "func = (\\x -> putStr x >> print x) "
我不确定您将使用“不使用>>
”部分(如果这确实是使用do
-notation 的重点),但您可以轻松编写一个辅助函数,将两个函数依次应用于同一输入:
tee f g s = f s >> g s
func = tee putStr print "..."
此外,为了避免重复字符串,带有let
or的局部变量where
可能是最简单的:
let s = "..."
in putStr s >> print s
你可以这样做:
doActions str actions = mapM_ ($ str) actions