【问题标题】:How IO operations working on F#IO 操作如何在 F# 上工作
【发布时间】:2014-07-15 02:28:55
【问题描述】:

haskell 上有 IO monad 来保持它的纯净。我知道 f#/ocaml 支持可变状态,但 IO 操作实际上是如何工作的。 haskell 的 IO monad 对应的概念是什么。

【问题讨论】:

  • 简短的回答是:F# 没有。
  • F# 没有 Haskell 的纯度,并且明确允许方法有副作用。

标签: haskell f# functional-programming monads


【解决方案1】:

F# 不纯。它继承了 Caml 允许随处更改 IO 和状态(例如分配给可变变量)的传统。例如:

let f : int -> int =
   fun x -> 
      printf "Hello\n";
      x+1

printf "%d\n" (f 1 + f 2)      (* prints Hello twice, then 5 *)

不过,如果您想使用 Monad,您仍然可以在 F# 中找到它们。 Computation expressions 大致对应于 monad。

【讨论】:

  • 我明白了,printf 的返回值会发生什么?它是否返回一个值?我记不太清楚了,但是 ocaml 强制你将每个返回值分配给一个变量,对吧?
  • @UmurGedik 有丢弃值的警告,但如果返回值的类型为unit,则不会,就像printf "Hello\n" 一样。
  • @ØrjanJohansen 谢谢,有道理。
猜你喜欢
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-14
  • 2018-04-17
  • 2013-02-12
  • 2011-05-23
相关资源
最近更新 更多