相关疑难解决方法(0)

为什么不能通过严格的评估来欺骗Haskell执行IO操作?

我只是在学习Haskell和IO monads.我想知道为什么这不会强制程序输出"hi"以及"bye":

second a b = b
main = print ((second $! ((print "hi") >>= (\r -> return ()))) "bye")
Run Code Online (Sandbox Code Playgroud)

据我所知,$!运算符会强制要求第一个参数second进行求值,并且>>=运算符需要运行print "hi"以便从中获取值并将其传递\r -> return ()给屏幕,这将打印"hi"到屏幕.

我的推理有什么问题?

而且,有没有办法证明Haskell不能被欺骗(除了使用不安全的函数)在"安全"代码中运行IO操作?

monads haskell io-monad

16
推荐指数
2
解决办法
1664
查看次数

标签 统计

haskell ×1

io-monad ×1

monads ×1