【发布时间】:2017-05-30 21:18:45
【问题描述】:
Haskell 中记录类型和子类型的当前状态是什么?
我知道已经完成了诸如重载记录名称等方面的工作。具体来说,我想创建三种不同的记录类型A、B 和 C 其中B 和C包含与A 相同的所有字段标签,但彼此之间不共享字段标签。然后,我希望能够编写f : A -> int、g: B -> int、h: C -> int 的函数,其中函数f 也接受B 和C 类型的参数。基本上,我希望B 和C 成为A 的子类型。更具体地说,如果我不必重复所有字段标签,那就太好了。在伪代码中,这类似于
data A = A { a :: String }
data B = B { A, b :: Char }
data C = C { C, c :: Float }
f :: A/B/C -> int
g :: B -> int
h :: C -> int
【问题讨论】:
-
Haskell 没有子类型,至少在 OOP 意义上没有。相反,你可以做
data A = A { a :: String};data B = B { bA :: A, b :: Char };data C = C { cA :: A, c :: Float }.
标签: haskell