我在写这样的函数。如何在不使用“>>”的情况下将两个函数应用于相同的字符串
func :: IO()
func = putStr print "func = putStr print"
我知道这是不正确,但这个想法是我要应用到的字符串,然后应用到相同的字符串"fun = .."
print
的putStr
使输出将是:
func = putStr print "func = putStr print"
这是相同的作为我的函数定义。谢谢
我在写这样的函数。如何在不使用“>>”的情况下将两个函数应用于相同的字符串
func :: IO()
func = putStr print "func = putStr print"
我知道这是不正确,但这个想法是我要应用到的字符串,然后应用到相同的字符串"fun = .."
print
的putStr
使输出将是:
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
或where
一个局部变量很可能是最简单的:
let s = "..."
in putStr s >> print s
你可以做这样的:
doActions str actions = mapM_ ($ str) actions