14得票8回答
请确认或更正我对这个Haskell代码片段的"英文解释"

我是一名C#开发人员,正在阅读"Real World Haskell"这本书,以便真正理解函数式编程。这样当我学习F#时,我就可以真正领会它,而不仅仅是“用C#代码写F#代码”。 今天,我遇到了一个例子,我认为我已经理解了3次,然后才发现漏掉了某些东西,更新了我的解释,并递归(也诅咒过,相信...

13得票3回答
Haskell数据类型使用的良好实践

读《Real world Haskell》时,我发现了一些关于数据类型的有趣问题: 这种模式匹配和位置数据访问使得你看起来在数据和操作它的代码之间非常紧密耦合(尝试向Book添加某些内容,或更糟糕的是修改现有部分的类型)。 在命令式编程语言(特别是面向对象的语言)中,这通常是...

7得票1回答
为什么将数据重构为newtype会加速我的Haskell程序?

我有一个程序,它遍历一个执行概率分布代数的表达式树,可以进行采样或计算结果分布。 我有两个实现方法来计算分布:一个(`computeDistribution`)可以很好地重复使用monad transformer,另一个(`simpleDistribution`)需要手动具体化。我不想手动具...

52得票4回答
“和乘积”数据结构是什么?

William Cook的Fusings最近的一篇博客文章提到: 关键点在于 Ensō 中的结构是作为图形整体被看待的,而不是作为单个值或传统的总和与乘积数据结构。 他所指的传统总和与乘积数据结构是什么?

21得票1回答
结构元组的性能表现

以下的F#程序定义了一个函数,该函数返回以结构元组表示的两个整数对中较小的那个,并且运行需要1.4秒:let [<EntryPoint>] main _ = let min a b : int = if a < b then a else b let min (str...

7得票1回答
什么使得Scala中的类/特质成为ADT?

什么是 Scala trait/class 被归类为 ADT 的要求? 所有的 sealed traits/classes 在 Scala 中都是 ADT 吗?或者它需要更多的属性才能够被认定为 ADT,例如支持方法 fold? 所有 sealed traits/classes 的实现是否...

8得票1回答
在OCaml中简化产品类型后无法解构

我有一个OCaml的简单代码: type int_pair = int * int;; type a = A of int_pair;; let extract (A x) = x;; 测试我的提取函数,它似乎可以工作: # extract (A (1,2));; - : int_pa...

17得票1回答
类型代数和Knuth的上箭头符号

阅读这个问题和这篇博客文章让我更加思考类型代数,特别是如何滥用它。 基本上, 1)我们可以将Either A B类型视为加法:A+B 2)我们可以将有序对(A,B)视为乘法:A*B 3)我们可以将函数A -> B视为指数:B^A 这里显然有一个模式:乘法是重复的加法,指数是重复...

12得票4回答
Haskell中的"Dependent optional"数据

考虑一个DateTime类型,日期必须存在,但是秒钟部分是可选的。如果时间部分存在,则可能会有一个可选的毫秒部分。如果毫秒存在,则可能会有纳秒部分。 有很多处理这种情况的方法,例如:--rely on smart constructors data DateTime = DateTime ...

9得票1回答
没有构造函数的代数数据类型的目的是什么?

在Haskell中,您可以定义一个没有构造函数的代数数据类型: data Henk 但是,如果一个类型(或种类)没有构造函数,那么它的目的是什么呢?