F#可以为管理非确定性提供什么?

Tri*_*Gao 3 f# purely-functional

在与现实世界对话的应用程序中,使用非确定性函数是不可避免的.明确区分确定性和非确定性是很重要的.

Haskell有IO monad通过查看我们知道它之外的所有内容都是纯粹的来设置不纯的上下文.哪个好,如果你问我,在单元测试时,可以分辨出他们的代码哪个部分最终是可测试的,哪个不是.

我找不到任何允许在F#中分离两者的东西.这是否意味着没有办法做到这一点?

Tom*_*cek 5

F#类型系统没有捕获确定性和非确定性函数之间的区别,但是需要处理非确定性的典型F#系统将使用一些明确区分两者的结构(或"设计模式").

  • 如果您的核心模型是一些不与世界交互的计算(您只需要收集输入并运行计算),那么您可以将大部分代码编写为不可变数据结构上的函数转换,然后从一些"main"中调用它们"I/O循环.

  • 如果您正在编写一些高度交互或反应性的应用程序,那么您可以使用F#代理(这是一篇介绍性文章)并构建您的应用程序,以便非确定性安全地包含在各个代理中(请参阅有关基于代理的体系结构的更多信息)