据我所知,doHaskell中的块只是monadic绑定运算符的某种语法糖.例如,一个人可以转换
main = do f <- readFile "foo.txt"
print f
print "Finished"
Run Code Online (Sandbox Code Playgroud)
至
main = readFile "foo.txt" >>= print >> print "Finished"
Run Code Online (Sandbox Code Playgroud)
是否可以将所有do块转换为绑定语法?例如,f多次使用此块的情况如何:
main = do f <- readFile "foo.txt"
print $ "prefix " ++ f
print $ f ++ " postfix"
Run Code Online (Sandbox Code Playgroud)
假设我们在IO monad中,则不可能简单地执行readFile两次计算.如何使用绑定语法表示此示例(如果可能的话)?
我认为使用Control.Monad不是解决方案,因为它在内部使用do块.
我认为可以使用箭头(使用&&&)表达这一点- 也许这只是一个箭头可以用作monads的推广的情况?
请注意,这个问题不是关于上面的特殊示例,而是关于在monadic表达式中多次使用计算结果的一般情况print.