Evg*_*eny 7 haskell types scala algebraic-data-types
根据大多数定义,Haskell 或 Scala 中常见或基本的代数数据类型是 sum 和 product。示例:1、2。
有时定义只是说代数数据类型是 sum 和 product,也许是为了简单起见。
但是,这些定义给人的印象是其他代数数据类型也是可能的,而 sum 和 product 只是描述元素选择或组合最有用的方法。
鉴于在基本代数中存在减法、除法、整数幂运算 - 编程中其他替代代数类型的某些实现是否正确,但它们没有用?
是否有任何编程语言实现了不是 sum 和 product 类型的代数数据类型?
luq*_*qui 15
“代数”来自范畴论。每个代数数据类型都是函子的初始代数。所以原则上你可以用这种方式将来自函子的任何东西称为代数,我认为这是一个相当大的类。
将“代数”解释为“高中代数”(我并不是要居高临下,这就是我们所说的),正如您所拥有的,有一些很好的类比。
A -> B类似于。在范畴论中,当您将函数(“态射”)视为范畴的对象时,它被称为指数对象,并使用后一种表示法。为了好玩,看看是否可以通过在相应类型之间编写双射来证明该定律。BACA+B = CA × CB