问题标签 [ghc-generics]

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

haskell - 带有 GHC.Generics 的“packageName”

我有一个为类型提供全局唯一标识符的类:

这几乎可以工作:

但我无法获得数据类型的包GHC.Generics

我可以吗?没有软件包,GUI 并不是真正“全球”独一无二的。

顺便说一句,我知道Data.Typeable我可以写:

这是我可以做的。但我很好奇GHC.Generics

0 投票
1 回答
688 浏览

haskell - 没有因使用“from”而产生的 (Generic (fa)) 实例

我在为以下代码找到合适的类型约束时遇到问题

它失败了

gname像这样添加约束

失败了

编辑:完整片段的完整错误消息

这是 GHC 7.6.3

0 投票
1 回答
50 浏览

haskell - 使用 GHC.Generics 时添加 Show 约束

我正在使用 GHC 泛型。我的用例与 wiki 中的示例几乎相同,只是我正在编码和解码基因序列。

这一切都很好,直到我决定保留我已经阅读的内容列表,以便在出现错误时向用户报告。这意味着我需要为Show我的默认实现添加一个约束get。问题是我不知道如何编写约束。请参阅-- HELP!!!下面代码中的注释。

0 投票
2 回答
88 浏览

haskell - 如何为泛型向量创建 ListIsomorphic 实例?

给定以下课程:

如何使用 编写向量类型的实例Data.Vector.Generic?这不起作用:

给我:

0 投票
1 回答
198 浏览

haskell - 了解如何构建 GHC.Generics Rep 并转换回值

我正在尝试学习如何使用GHC.Generics. 一个有趣但令人生畏的话题。

在阅读博客文章24 Days of GHC Extensions: DeriveGeneric时,我学会了如何获取一个值并浏览它的Rep. 好的。

然而,阅读博客文章Building data constructors with GHC Generics描述了构造Rep和将其转换回一个值的类比,我被难住了。我已经阅读 许多 其他资源 但没有太大帮助。

在博客条目中是以下代码。首先,构建Rep

然后,处理Compose

然后处理类型歧义:

哇。

真的,我一开始就被困在返回函子的Mk班级mk。我的问题:

  1. 什么是mk回归?为什么是函子?对其结果有何解释?我可以看到该K1 i c实例Mk返回一个函数(我知道这是一个函子),该函数接受一个值并将其包装在 中,但K1我完全迷失了。mkMk (l :*: r)Mk (M1 i c f)

  2. 我猜Compose来自Data.Functor.Compose,这意味着当我这样做时fmap f x,它会将fmap两个级别深入到组合的函子中。但我无法fmap理解Compose.

  3. 对于 的实例M1 i c f,我认为它只会将内部值包装在 中M1,因此需要M1 <$> mkfmap M1 mk对我来说没有意义。

显然,我并没有理解这些实例的意图或含义,以及这些实例如何交互以创建最终的Rep. 我希望有人能启发我并提供一个很好的解释如何使用GHC.Generics

0 投票
1 回答
51 浏览

haskell - 如何为 GHC.Generics.U1 创建 Mk 实例?

我正在研究使用 GHC Generics 构建数据构造函数的博客中的内容。我之前的问题在这里

该帖子具有以下代码来创建一个Rep

是否可以创建一个类似的实例U1?如果是这样,怎么做?

0 投票
1 回答
293 浏览

haskell - 在通用 SOP 中检索记录功能

Sum of Products方法中,如何检索记录功能?下面带有记录数据类型 ( ) 的示例代码ghc 7.10.3

让我们DataTypeInfo 在 ghci 提示符下查看:

我们看到了,frec并且srec都是FieldInfo具有构造函数的类型,该构造函数FieldInfo采用fieldNameas 字符串。所以,我看不到任何方法来获得实际的功能frec :: Rec -> Intsrec :: Rec -> Maybe String. 我还查看了显示示例,但它不使用记录功能。

将欣赏有关如何获取记录函数的指针(可能是 HList 类型HList '[(Rec -> Int), (Rec -> Maybe String)]))。

问题的附录

我被困在关于如何使用 user2407038 提出的方法从投影中获取功能的类型结中。所以,我想进一步补充这个问题:我们如何使用构造函数的SOP方法Rec构建如下函数 - 我们使用记录字段名称以及此处的函数:

0 投票
2 回答
296 浏览

haskell - 如何用 GHC.Generics 替换 Data.Generics?

所以我用syb很久了,经常有这样的功能

假设 Generic a,使用 GHC.Generics 的等价物是什么?

0 投票
2 回答
163 浏览

haskell - 使用泛型实现 Applicative 构建器样式

语境

如果我们有

我们已经可以在 Applicative 上下文(这里是 IO)中构建它的 applicative-style

问题

如果一个人更喜欢明确写出记录字段名称怎么办?如:

这不会进行类型检查。一种解决方案是

这还不错。但我想知道(此时仅出于自身考虑)以下是否可行:

我相信它可以通过裸GHC.Generics模式匹配来完成,但这不具有类型安全性,所以我正在寻找一种更强大的方法。我遇到过generics-sop,将记录转换为异构列表,并附带一个看似方便的hsequence操作。

我被卡住的地方

generics-sopI将 Applicative 的类型存储在其异构列表的单独类型参数中,并且在使用生成的转换时始终为(Identity)。所以我需要映射 hlist 并I从元素中删除 ,这将有效地将 Applicative 移动I到提到的类型参数(它将是Comp IO Maybe),所以我可以使用hsequence,最后加回Is 以便我可以隐蔽回记录.

但是我不知道如何为I删除/添加函数编写类型签名,该函数表明各个 hlist 元素的类型通过丢失/获得外部类型而不断变化。这甚至可能吗?

0 投票
1 回答
347 浏览

haskell - 同时导出 Generic 和 ToJSON?

我有一个模块Foo.hs,其中包含一个不派生的定义Generic

在另一个模块中我想派生ToJSON

但它不编译。如果我在定义站点导出 Generic,Foo.hs我稍后可以ToJSON在另一个模块中导出。

我可以ToJSON BlatherBar.hs不修改原件的情况下推导出来Foo.hs吗?

或者有没有简单instance ToJSON Blather的手写方式?