我正在写一个这样的函数。

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top