【发布时间】:2014-12-15 12:48:09
【问题描述】:
假设您有一个很好的归纳定义,并且您想将其定义为 Haskell 中的数据类型。但是,您的归纳定义(与许多归纳定义一样)具有这样一种形式,即生成规则要求它们的“前提”具有某种结构。例如,假设我们有以下定义:
- 如果
x是偶数,那么T x是武器, - 如果
x是奇数,则S x是武器。
如果我想在 Haskell 中定义这个(作为单一的)数据类型,我会写类似的东西
data Weapon = T Int | S Int
显然,这将不起作用,因为您现在可以生成 T 5 和 S 4,例如。是否有一种自然的方式来传递对构造函数参数的限制,以便我可以编写类似于上述代码的代码来给出正确的定义?
【问题讨论】:
-
智能构造函数,主要是。禁止直接使用
T和S,并创建newT和newS函数来验证通过的数字。
标签: haskell types representation