【问题标题】:Haskell's newtypes in ScalaHaskell 在 Scala 中的新类型
【发布时间】:2022-01-24 00:48:26
【问题描述】:

在 Haskell 中,我们可以声明新类型以减少动态内存分配并创建类型安全的 API。

newtype Username String = Username String
  deriving (Eq, Ord)

newtype 仅适用于具有单个构造函数和单个参数的数据类型。 Scala中有没有类似newtype的东西?

例子:

case class Username(username: String)

对于用户名,我们可以在 Scala 中这样写:

newtype Username(username: String)

【问题讨论】:

  • 哪个 Scala 版本?

标签: scala haskell newtype


【解决方案1】:

等效于 Haskell 的 newtype 是 Scala 3 中的 Opaque Type Aliases

opaque type Username = String

它基本上是一个type 别名……但不透明。就像封面上说的那样。

【讨论】:

  • 值得一提的是,在 Scala 2 中我们可以使用这个库:github.com/estatico/scala-newtype?
  • Scala 2 中也有值类,不是吗?
  • @GaëlJ 考虑到它们的局限性和令人惊讶的行为,我不建议将它们用于新类型建模。
  • @LuisMiguelMejíaSuárez:我假装 Scala 2 不再存在。使整个过渡更加顺畅:没有过渡:-D
  • @GaëlJ:我不认为值类是不透明的类型包装器。它们是用户定义的值类型(Java 中的“原语”)。不同的用例。
猜你喜欢
  • 1970-01-01
  • 2015-01-22
  • 2015-03-08
  • 1970-01-01
  • 2019-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多