这是对Haskell IO的合理看法吗?
给定程序时,Haskell运行时执行以下操作:
main返回"IO计算"这种两阶段方法允许main保持纯粹的功能.
在这种情况下,IO计算就像是具有显式排序的Haskell的特殊版本 - 或者可能有更好的方法来描述它?
Lui*_*las 12
是的,这是程序执行方式的一个不错的语义模型.当然,实现并不像那样,但您仍然可以使用该模型来推断程序.
但更一般地说,是什么IO让你将命令式程序视为纯粹的价值观.然后,Monad操作允许您从较小的命令式程序(或使用此上下文中的常用术语,操作)和纯函数组成命令式程序.因此纯函数模型虽然不能执行命令式程序,但仍然可以将它们描述为类型的表达式,IO a编译器可以将这些描述转换为命令式代码.
或者你可以这样说:
main.即,模型的"评估main"部分被推送到编译器,并且在您第一次描述时不在运行时中.
你的观点IO很好,但我对这一行有疑问
调用main来获取"IO计算"
考虑Haskell的最佳方式是函数不做任何事情.相反,您以声明方式描述值是什么.程序包含对IO所调用值的描述main.它"称为主要"的唯一意义是声明main被简化为弱头范式(或类似的东西).
IO是任意副作用 - 完全计算的类型.Haskell的纯子集是对值的纯粹声明性描述,恰好允许不可判定的描述.将Haskell想象为集合论等数学语言.集合论中的陈述不做任何事情,但它们可能涉及复杂的计算,如"包含Akerman's_function(30)的最小集合".它们还可以包含不可判定的语句,例如"S =不包含自身的所有集合的集合"
@amindfv是对的一半:main不是"纯粹的功能".它根本不是一个功能.它是一个值,由纯粹的缩减定义,编码不合理的计算.
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |