如何在不使用">>"的情况下将两个函数应用于同一个字符串
题
我正在写一个这样的函数。
func :: IO()
func = putStr print "func = putStr print"
我知道这是不正确的,但我的想法是我想要 putStr
然后应用到字符串上 print
应用于同一字符串 "fun = .."
这样输出就会是:
func = putStr print "func = putStr print"
这与我的函数定义相同。谢谢
解决方案
如果你的目标是写一个 奎因 (本文也给出了另一个Haskell示例),您可以使用lambda表示法进行变量捕获。
func = (\x -> putStr x >> print x) "func = (\\x -> putStr x >> print x) "
其他提示
我不确定您要去哪里“不使用 >>
“一部分(如果这实际上是用途的 do
- 通知),但是您可以轻松地编写一个辅助功能,该功能将两个函数顺序应用于相同的输入:
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
不隶属于 StackOverflow