Questions tagged «haskell»

1
IO monad在技术上是否不正确?
在haskell Wiki上,有以下有条件使用IO monad的示例(请参见此处)。 when :: Bool -> IO () -> IO () when condition action world = if condition then action world else ((), world) 请注意,在此示例中,对的定义IO a是RealWorld -> (a, RealWorld)为了使所有内容都易于理解。 该代码段有条件地在IO monad中执行一个动作。现在,假设condition是False,则action永远不应执行该操作。使用惰性语义确实是这种情况。然而,需要注意这里是Haskell是从技术上来说不严格。这意味着,例如,允许编译器抢先action world在其他线程上运行,然后在发现不需要时放弃该计算。但是,到那时,副作用已经发生了。 现在,可以以这样一种方式来实现IO monad,即仅在整个程序完成时才传播副作用,并且我们确切知道应该执行哪些副作用。但是,事实并非如此,因为有可能在Haskell中编写无限的程序,而这些程序显然具有中间的副作用。 这是否表示IO monad在技术上是错误的,还是有其他阻止此情况发生的方法?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.