haskell - D 有 'newtype' 吗?

标签 haskell types d type-systems

D 是否有“新类型”(如在 Haskell 中)。

这是一个幼稚的问题,因为我只是略读 D,但谷歌没有发现任何有用的东西。

在 Haskell 中,这是一种在编译时区分同一事物的不同类型的方法,但不会导致任何运行时性能损失。

例如你可以为米、秒和公斤制作新类型( double )。如果您的程序将一个以米为单位的数量添加到一个以秒为单位的数量,这将在编译时出错,但在运行时就像两者都是双倍一样快(它们在运行时)。

如果 D 没有类似于“newtype”的东西,那么处理量纲量的公认方法是什么?

谢谢,

克里斯。

最佳答案

在 D1.0 中有 typedef,它是从预定义类型到“新类型”的强类型。

D2.0 已经删除了这个并且只保留了别名(C 中的 typedef 是什么)。有人谈论拥有一个可以强烈创建新类型的包装模板。

typedef 的问题在于,使 newtype 成为预定义类型的子类型有很好的论据,也有很好的论据使它成为父类(super class)型。

typedef 的语义是基类型隐式转换为 newtype,但 newtype 不转换为基类型或具有相同基类型的其他类型。我在这里使用基本类型,因为:

typedef int Fish;
typedef Fish Cat;
Fish gold = 1;
Cat fluff = gold;

将无法编译。

截至目前,2.048 DMD 仍然允许使用 typedef(但不要使用它)。

将基本类型转换为新类型很有用,因此您不必编写
meters = cast(meters) 12.7;

关于haskell - D 有 'newtype' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3576580/

相关文章:

haskell - Fundeps 和 GADT : When is type checking decidable?

haskell - 由于垃圾收集,Haskell 程序中会出现多长时间的暂停?

haskell - GHCi 错误 - "Not in scope: ` isUpper'"

c++ - 从 String 到 Type (C++) 的最佳方法是什么

operator-overloading - 为什么 opAssign 不能为类重载?

function - 在 Haskell 中减少命题的大小

python - 确定对象的类型?

c - 在 C 中遇到数组结构问题

d - 遍历 D 中文件夹中的文件

extension-methods - D 中的扩展方法?