问题标签 [deriving]

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 回答
224 浏览

haskell - 派生类型及其依赖项

我一直在为我的索引使用新类型包装器以避免错误,并且我有一些这样的代码:

要派生Integral,还必须派生其所有依赖项(因此上面列出了类型类)。

有没有办法让它派生所有的依赖关系Integral?我会想象这样的事情:

0 投票
3 回答
54348 浏览

haskell - 在 Haskell 中推导是如何工作的?

Haskell 中的代数数据类型(ADT) 可以通过派生某些类型类(如Show,自动成为它们的实例。Eq

我的问题是,这是如何deriving工作的,即 Haskell 如何知道如何为派生 ADT 实现派生类型类的功能?

另外,为什么deriving仅限于某些类型类?为什么我不能编写自己的可以派生的类型类?

0 投票
2 回答
199 浏览

haskell - Eq 实例有一些奇怪的比较

我制作了一个图像处理模块,将Pixel类型定义为 aColorLocationPixel,ColorLocationderived Eq,因为我可能想比较多个图像之间的像素。

Eq适合我比较像素以查看它们是否完全相同的需要,这正是我想要的。实例化的一个奇怪的副作用Eq是,将 2 个不同的像素与相同Location的像素进行比较<=>=结果为True,但False==<>

然后在ghci中进行一些测试。

似乎我Ord对 a 的定义Pixel影响了这些比较,这是可以理解的。d表明Location影响比较。我感到困惑的部分是a是既>=<= b而不是==, <, or >

编辑:如果有人想使用此代码中的任何一个,我将包含此解决问题的代码段。请务必EqPixel定义中删除。

这仅允许比较Location。享受!:)

0 投票
1 回答
314 浏览

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

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

将自动生成实例,例如,

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

0 投票
3 回答
1087 浏览

serialization - Data.Binary(或朋友?)是否有模板 Haskell / 派生机制

Data.Binary文档显示了手动编写实例。有没有解决的办法?我在这里看到还有另一个库 SerTH,它有一个(基于 Haskell 的模板)派生机制,但它的链接似乎已断开。此外,如果您了解其他库,那么良好的性能对我们来说至关重要。

先感谢您!

0 投票
0 回答
105 浏览

haskell - 如何创建新的 Data.Derive 实例生成器?

有谁知道如何创建 Data.Derive 实例生成器的分步教程?似乎有大量关于如何使用现有派生实例生成器的文档。

对于那些不熟悉 Data.Derive 的人(或者如果我只是特别不清楚),这就是我想要做的。给定一个简单的 newtype 示例,例如,

我想生成所有这些实例(和约束数据系列)。它们几乎由字符串“WrapperT”、“WrapperTE”和“StateT Integer α”参数化。

0 投票
1 回答
533 浏览

haskell - Haskell——在“派生”实例的情况下,有什么方法可以关闭可重新绑定的语法?

有一个烦人的“特性”,即派生实例也会受到RebindableSyntax扩展的影响。我想写的例子:

这会出现错误“不在范围内:`ifThenElse'”。

0 投票
1 回答
1257 浏览

haskell - haskell——有什么方法可以为大致元组同构数据类型生成“派生”实例?

假设我有一个数据类型

和一个类型类

然后,我希望能够写

并让它生成一个实例,

通过使用模惰性求值同构,

注意。使用新类型GeneralizedNewtypeDeriving,例如,如果有data D m = D (m Integer) (m Integer).

注 2。这个问题通常与 Haskell 的表达能力有关——像 Python 这样的语言有一种叫做命名元组的东西,它可以在任何使用元组的地方使用;这个问题显示了我在哪里/如何不知道如何在 Haskell 中模拟同样的事情。

0 投票
2 回答
2904 浏览

c# - 从 C# 中的实体框架生成的类派生

我创建了一个实体数据模型并从中生成了一个数据库。

其中一个实体称为Template

创建部分类以扩展Template工作正常的功能。

如果我创建一个新类并尝试从 派生Template,我会在实例化时得到一个运行时异常:

Mapping and metadata information could not be found for EntityType 'Template001'.

我该如何解决这个问题?我绝对需要从 EF 类继承。

编辑

似乎不可能。如果是这种情况,实现以下要求的最佳方式是什么:模板实体存储有关模板的信息,每个模板都有自己的代码要执行。这就是为什么我首先尝试从实体中派生。

0 投票
2 回答
959 浏览

haskell - 具有关联类型同义词的 Data.Vector.Unbox 的自动派生

我有一个数据类型

其中 'q' 将是该类的一个实例

而“IntType”只是与“q”相关的底层表示(即 Int、Integral 等)。

我想让 Zq 成为Data.Vector.Unbox的一个实例。我们目前正在使用上面链接中建议的大约 50 行简单代码手动派生 Unbox。我们将在我们的代码中创建几种不同类型的“拆箱”,因此为每种类型编写 50 行并不吸引人。

我在这里找到了两种选择。一种替代方法是使用这个包,它使用 Template Haskell 来派生 Unbox 的实例。TH 代码如下所示:

问题是,我无法使用关联的类型同义词定义实例(或者我可以吗??)

[一个相关问题:为什么TypeSynonymInstances是 Fl​​exibleInstances隐含的扩展,不允许关联类型同义词实例?这是某种根本不同的野兽吗?]

我目前对该问题的解决方案是将 Zq 重新定义为

然后添加等式约束

在每个涉及 (Zq qi) 的情况下,这不是很优雅。我的(工作)拆箱派生变为

我觉得我应该能够在不诉诸于显式暴露类型“i”的情况下完成此操作。我所做的只是将它从关联的类型同义词移动到具有等式约束的显式参数。为什么这种“从根本上”是一种不同(而且显然更安全)的方法?有什么方法可以避免添加类型参数“i”并仍然获得自动拆箱派生?

除了额外的类型参数,我在使用 TH 包为 (Vector r) 派生 Unbox 时遇到了问题,也就是说,我想制作一个 Unbox Vector 的 Unbox Vector。我的尝试是这样的:

但我得到(很多)错误,例如:

我不确定为什么它找不到这个方法,当它适用于我的 Zq 类型时。


上面列出的第二种方法是使用扩展 GeneralizedNewtypeDeriving。我看到这种方法的最大问题是我有一些需要拆箱的实际数据(而不是新类型)。但是,仅使用扩展名,我应该可以编写

或者至少

第一个导致错误:

第二个给出:

我不确定为什么它不能导出这些实例,因为上面的帖子让我相信它应该能够。也许我可以摆脱使用 GeneralizedNewtypeDeriving 的关联类型同义词?(当我需要为“数据”派生 Unbox 时,这仍然(可能)不能解决我的问题。)

谢谢你的帮助!