【发布时间】:2011-08-27 13:53:28
【问题描述】:
我无法优雅地使用 Haskell 的类型系统。我确信我的问题很常见,但我不知道如何描述它,除非用我的程序特定的术语。
我试图表达的概念是:
数据点,每个数据点采用多种形式之一,例如(id, 病例数, 对照数), (id, 病例数, 人口)
数据点集和聚合信息:(id 集、案例总数、控件总数),具有添加/删除点的功能(因此对于每种不同的点,都有相应的不同集合)
我可以有一类点类型并将每种点定义为自己的类型。或者,我可以为每个品种设置一个点类型和不同的数据构造函数。对于点集也是如此。
我对每种方法至少有一个顾虑:
使用类型类:避免函数名冲突会很烦人。例如,两种类型的点都可以使用一个函数来提取“案例数”,但是类型类不能要求这个函数,因为其他一些点类型可能没有案例。
没有类型类:我宁愿不从 Point 模块导出数据构造函数(提供其他更安全的函数来创建新值)。如果没有数据构造函数,我将无法确定给定 Point 值的种类。
什么样的设计可以帮助减少这些(和其他)问题?
【问题讨论】:
-
在什么情况下需要对数据点进行类似处理?您说每种形式都需要自己的各种集合,并且诸如“案例数”之类的操作不是通用的。
标签: haskell types functional-programming