问题标签 [newtype]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
27030 浏览

haskell - Haskell中`data`和`newtype`之间的区别

我写这个有什么区别?

相对

0 投票
2 回答
995 浏览

haskell - 有没有办法在 GHC Haskell 中定义一个存在量化的新类型?

在(GHC)Haskell 中是否可以定义一个存在量化的新类型?我知道如果涉及类型类,则无法在字典传递实现中完成,但出于我的目的,不需要类型类。我真正想定义的是:

但 GHC 似乎并不喜欢它。目前我正在使用data Key t where Key :: !(t a) -> Key t. 有什么方法(也许只是使用-funbox-strict-fields?)来定义与上面的 newtype 版本具有相同语义和开销的类型?我的理解是,即使严格的字段未装箱,仍然会有一个额外的标签词,尽管我可能完全错了。

这不会导致我出现任何明显的性能问题。让我感到惊讶的是不允许使用新类型。我是一个天生好奇的人,所以我不禁想知道我拥有的版本是否正在编译为相同的表示形式,或者是否可以定义任何等效类型。

0 投票
2 回答
863 浏览

haskell - multi-parameter newtype faked with a tuple?

This is a dumb question that's been bugging me for a bit. Why can't I write a newtype with multiple parameters,

while the tuple version is just fine?

the former is much nicer in things like pattern matching.

0 投票
1 回答
544 浏览

haskell - 为 newtype 定义构造函数

我有一个类型

我四处寻找一种方法来指定新类型的构造函数。我意识到只能有一个,但我不明白为什么我可以指定它是什么。

例如,我可能只想将参数的前三个元素传递给PolyRing值构造函数。

我尝试where在 newtype 声明的末尾添加一个子句,但没有编译。

我也试过:

作为一个玩具的例子。我认为这应该做的是忽略 value 构造函数的参数并始终具有 value [2,3,5,7]。代码编译,但我的“自定义”构造函数没有效果。

是否可以为新类型指定构造函数?

0 投票
1 回答
314 浏览

haskell - 有什么方法可以自定义 GeneralizedNewtypeDeriving 实例的一两个方法?

Haskell 的 GeneralizedNewtypeDeriving 机制很棒;对于那些没有看过的人,写一些类似的东西

将自动生成实例,例如,

但是,对于我的一个类型类,我想自定义一些方法。有没有办法覆盖或禁用 GeneralizedNewtypeDeriving 对这些方法所做的事情?typeclass 对一些基本的 DSL 指令进行编码,例如for(循环)、parfor(并行循环)、fcndef(添加新函数)等,并且没有完美的方法将其拆分为多个 typeclass [然后自动派生一个,并手动编写另一个]。

0 投票
2 回答
535 浏览

haskell - 具有 RankNTypes 的新类型

如果我想声明一个newtype值的类型类型被限制为具有类型类的实例,似乎我可以这样做:

GHC 编译得很好,但是当我尝试并实际使用ShowBoxwith

我收到编译器错误

有没有办法使这项工作?

0 投票
2 回答
209 浏览

haskell - Haskell:类型安全同义词的新类型:使用两个构造函数有什么办法吗?

我想定义一个事物的多个版本,但具有不同的类型,以增强我程序中的类型安全性。例如,我有几种类型的双变量值,我想成为它们的实例,Num但它们都应该是不同的类型。所以我所做的是用一个类型变量创建一个新类型,并在此基础上声明新类型。但是,我发现我现在必须一直使用这两个构造函数有点烦人。有没有办法解决?

谢谢你!

编辑:

为了扩展原始问题,我还想在模式匹配中使用类型名称,类似于

这也可能吗?

0 投票
2 回答
195 浏览

haskell - newtype 语句的含义

我有这样的声明:

因此类型State为:

我无法理解其中的含义:

  • st并且a只是两种数据类型的占位符?正确的?
  • 该语句是否意味着 State 是一个以函数为参数的函数?
0 投票
1 回答
1963 浏览

java - 用户定义的值类在 Java 中是什么样的?

通过与 Haskell 的比较,我想我了解 Scala 2.10 的新“价值类”功能newtype

我的问题是,值类如何出现在使用声明它的 Scala 包的 Java 代码中?值类是作为 Java 端的引用类出现的,还是被完全删除(因此作为它包装的类型出现)?换句话说,当 Java 涉及到源代码级别时,值类的类型安全性如何?


编辑

根据 SIP-15 文档(在 Daniel 的回答中链接),上面的代码不会编译,因为值类不允许有任何初始化逻辑,因为要么v必须是明确的 val,要么Probability必须有一个unbox方法和一个相应的box它的伴生对象上的方法,并且因为值类必须只有一个字段。正确的代码是:

然而,问题本身仍然有效。

0 投票
3 回答
4450 浏览

haskell - 超载显示列表

我想要一个换行符分隔的表示,而不是通常的逗号分隔的表示,因为可能有新的数据类型:

我试图写这个 istance Show class

GHC 严重侮辱我。

有人可以尝试向我解释我该怎么办吗?