![]() |
1
8
我认为前两个问题的答案是“视情况而定”——自由单子会带来一些开销,当然也会遇到堆栈溢出,但您可以始终使用一个避免这种情况的实现,如果您正在进行I/O,那么开销可能不会太大。 我认为自由单子更大的问题是它们太复杂了。它们可以让你解决一个问题(抽象出你如何使用大量的it操作运行代码),但代价是你让代码变得非常复杂。大多数时候,我认为你可以保留一个“功能内核”作为一个很好的可测试的纯部分和围绕它的“命令包装器”,它足够简单,你不需要对它进行测试和抽象。 自由单子是非常通用的建模方法,你可以使用更具体的表示。对于阅读和写作,你可以做:
正如你所见,这不仅仅是一个简单的列表-
输入“Hello”时,只显示名称是否为空。运行程序的代码如下所示:
前两种情况很好,完全是尾部递归的。最后一个例子是tail recursive in
自由单子基本上是对这一点的抽象——但我个人认为它们走得太远了,如果我真的需要它,那么像上面这样的东西——有具体的说明——是更好的解决方案,因为它更简单。 |
![]() |
Thomas · 使类型别名在F中不可互换# 3 年前 |
![]() |
sdgfsdh · 我该怎么说。使用异步转换函数进行收集? 7 年前 |
![]() |
Soldalma · 我可以实例化包含顶级副作用值的类吗? 7 年前 |
![]() |
matekus · F#-包含数字的字符串的自然排序 7 年前 |
![]() |
matekus · F#类型匹配-无法创建映射或匹配记录 7 年前 |
![]() |
Rob Lyndon · 未找到F#ProvidedTypes文件 7 年前 |
![]() |
red-swan · 如何将intro ML.Net演示翻译为F#? 7 年前 |
![]() |
jkone27 · F#-在编译时从字符串生成简单的空类型 7 年前 |