【发布时间】:2018-03-31 06:52:15
【问题描述】:
我正在阅读 “Haskell 编程” 一书,并试图将 Haskell 的想法与我在 C# 中的知识联系起来。如果我错了,请纠正我。
我觉得 monads 强制程序员编写可以处理异常的代码。所以我们会明确提到类型系统中的错误处理,比如
Optional(Int) functionName(Int a, Int b)
返回类型是 Optional(Int) 但不是 Int,所以曾经使用过具有这种返回类型的库的人会理解正在发生错误处理,结果将类似于 None(说明出了什么问题)还有一些(解释我们得到了一些结果)。
任何代码都可能导致快乐路径(我们得到一些结果)和悲伤路径(发生错误的地方)。在类型系统中显式地制作这条路径就是 monad。这就是我对它的理解。请纠正我。
Monad 就像是纯函数式编程和不纯代码之间的桥梁(会产生副作用)。
除此之外,我想确保我对异常处理 (VS) 选项类型的理解。
异常处理尝试在不深入了解输入的情况下执行操作。异常处理很重,因为调用堆栈必须展开直到它到达 Catch ||救援 ||处理代码。
处理事情的函数式方法是在执行操作之前检查输入,如果输入不符合要求的标准,则返回 "None" 作为结果。选项类型是处理错误的轻量级。
【问题讨论】:
-
Optional只是Monad的一个实例。还有很多其他的。 -
请注意,在 C 中没有
option或 monads 或异常,但仍有错误处理
标签: haskell monads option-type