相关疑难解决方法(0)

仅使用monadic绑定语法表示阻止

据我所知,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.

monads haskell scope do-notation

5
推荐指数
2
解决办法
228
查看次数

标签 统计

do-notation ×1

haskell ×1

monads ×1

scope ×1