F# 上的 IO 操作如何工作

Umu*_*dik 1 monads f# haskell functional-programming

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

chi*_*chi 5

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 *)
Run Code Online (Sandbox Code Playgroud)

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

  • @UmurGedik 有一个关于丢弃值的警告,但如果返回值的类型为 `unit`,则不会出现警告,就像 `printf "Hello\n"` 那样。 (2认同)