gpt4 book ai didi

haskell - 哪些编程语言有类似 Haskell 的 `newtype`

转载 作者:行者123 更新时间:2023-12-02 08:23:15 24 4
gpt4 key购买 nike

Haskell 编程语言有一个 newtypes 的概念:如果我写 newtype Foo = Foo (Bar),那么就会有一个新类型 Foo被创建为与 Bar 同构,即两者之间存在双射转换。该构造的属性是:

  • 这两种类型是完全独立的(即,如果不使用显式转换,编译器将不允许您在需要另一种类型的情况下使用一种类型)。
  • 它们具有相同的表示形式。特别是,转换函数的运行时成本为零,并在堆上返回“相同的对象”。
  • 只能在这些类型之间进行转换,并且不能被误用,即保留类型安全。

还有哪些其他编程语言提供此功能?

一个示例似乎是 C 语言中的单值结构,仅与记录访问器/构造函数一起使用。当与强制转换一起使用时,无效的候选者将是 C 中的单值结构,因为编译器不会检查强制转换;或者是 Java 中具有单个成员的对象,因为它们不会共享相同的表示形式。

相关问题:Does F# have 'newtype' of Haskell? (否)和 Does D have 'newtype'? (不再是了)。

最佳答案

Frege不过,与 Haskell 不同,没有额外的关键字。相反,每种只有一个组件的产品类型都是一种新类型。

示例:

data Age = Age Int

此外,所有具有名义类型并允许根据另一种类型定义类型的语言都应该具有此功能。例如 Oberon、Modula-2 或 ADA。所以之后

type age = integer;      {* kindly forgive syntax errors *}

人们无法混淆年龄和其他一些数量。

关于haskell - 哪些编程语言有类似 Haskell 的 `newtype`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17591276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com