每个单子都有一个变换器版本,据我所知,变换器的概念是单子的一种通用扩展。根据其他变换器的构建方式,IOT
应该是这样的:
newtype IOT m a = IOT { runIOT :: m (IO a) }
我可以即时开发有用的应用:IOT Maybe
可以执行 IO 操作或什么都不做,IOT []
可以构建一个列表,稍后可以对其进行 sequence
。
那么为什么Haskell中没有IO transformer呢?
(注:我看过这篇Haskell Cafe帖子,但无法理解太多。此外,ST变换器的Hackage页面在其描述中提到了可能相关的问题,但没有提供任何详细信息。)
runIO
函数(当然不包括unsafePerformIO
)... - stephen tetleym a -> a
这个函数,所以我不明白它是如何相关的。 (bind 的内部实现可以是不安全的,只要接口是纯的即可。)IOT
,这会导致不可预测的行为吗?(如果是的话,也许可以将其作为完整答案) - DavidrunIOT (launchMissiles >> lift [])
应该求值为什么? - is7s