问题标签 [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.
haskell - 带有 GHC.Generics 的“packageName”
我有一个为类型提供全局唯一标识符的类:
这几乎可以工作:
但我无法获得数据类型的包GHC.Generics
:
我可以吗?没有软件包,GUI 并不是真正“全球”独一无二的。
顺便说一句,我知道Data.Typeable
我可以写:
这是我可以做的。但我很好奇GHC.Generics
。
haskell - 没有因使用“from”而产生的 (Generic (fa)) 实例
我在为以下代码找到合适的类型约束时遇到问题
它失败了
gname
像这样添加约束
失败了
编辑:完整片段的完整错误消息
这是 GHC 7.6.3
haskell - 使用 GHC.Generics 时添加 Show 约束
我正在使用 GHC 泛型。我的用例与 wiki 中的示例几乎相同,只是我正在编码和解码基因序列。
这一切都很好,直到我决定保留我已经阅读的内容列表,以便在出现错误时向用户报告。这意味着我需要为Show
我的默认实现添加一个约束get
。问题是我不知道如何编写约束。请参阅-- HELP!!!
下面代码中的注释。
haskell - 如何为泛型向量创建 ListIsomorphic 实例?
给定以下课程:
如何使用 编写向量类型的实例Data.Vector.Generic
?这不起作用:
给我:
haskell - 了解如何构建 GHC.Generics Rep 并转换回值
我正在尝试学习如何使用GHC.Generics
. 一个有趣但令人生畏的话题。
在阅读博客文章24 Days of GHC Extensions: DeriveGeneric时,我学会了如何获取一个值并浏览它的Rep
. 好的。
然而,阅读博客文章Building data constructors with GHC Generics描述了构造Rep
和将其转换回一个值的类比,我被难住了。我已经阅读了 许多 其他资源, 但没有太大帮助。
在博客条目中是以下代码。首先,构建Rep
:
然后,处理Compose
:
然后处理类型歧义:
哇。
真的,我一开始就被困在返回函子的Mk
班级mk
。我的问题:
什么是
mk
回归?为什么是函子?对其结果有何解释?我可以看到该K1 i c
实例Mk
返回一个函数(我知道这是一个函子),该函数接受一个值并将其包装在 中,但K1
我完全迷失了。mk
Mk (l :*: r)
Mk (M1 i c f)
我猜
Compose
来自Data.Functor.Compose
,这意味着当我这样做时fmap f x
,它会将fmap
两个级别深入到组合的函子中。但我无法fmap
理解Compose
.对于 的实例
M1 i c f
,我认为它只会将内部值包装在 中M1
,因此需要M1 <$> mk
或fmap M1 mk
对我来说没有意义。
显然,我并没有理解这些实例的意图或含义,以及这些实例如何交互以创建最终的Rep
. 我希望有人能启发我并提供一个很好的解释如何使用GHC.Generics
。
haskell - 在通用 SOP 中检索记录功能
在Sum of Products
方法中,如何检索记录功能?下面带有记录数据类型 ( ) 的示例代码ghc 7.10.3
:
让我们DataTypeInfo
在 ghci 提示符下查看:
我们看到了,frec
并且srec
都是FieldInfo
具有构造函数的类型,该构造函数FieldInfo
采用fieldName
as 字符串。所以,我看不到任何方法来获得实际的功能frec :: Rec -> Int
和srec :: Rec -> Maybe String
. 我还查看了显示示例,但它不使用记录功能。
将欣赏有关如何获取记录函数的指针(可能是 HList 类型HList '[(Rec -> Int), (Rec -> Maybe String)]
))。
问题的附录
我被困在关于如何使用 user2407038 提出的方法从投影中获取功能的类型结中。所以,我想进一步补充这个问题:我们如何使用构造函数的SOP
方法Rec
构建如下函数 - 我们使用记录字段名称以及此处的函数:
haskell - 如何用 GHC.Generics 替换 Data.Generics?
所以我用syb很久了,经常有这样的功能
假设 Generic a,使用 GHC.Generics 的等价物是什么?
haskell - 使用泛型实现 Applicative 构建器样式
语境
如果我们有
我们已经可以在 Applicative 上下文(这里是 IO)中构建它的 applicative-style
问题
如果一个人更喜欢明确写出记录字段名称怎么办?如:
这不会进行类型检查。一种解决方案是
这还不错。但我想知道(此时仅出于自身考虑)以下是否可行:
我相信它可以通过裸GHC.Generics
模式匹配来完成,但这不具有类型安全性,所以我正在寻找一种更强大的方法。我遇到过generics-sop
,将记录转换为异构列表,并附带一个看似方便的hsequence
操作。
我被卡住的地方
generics-sop
I
将 Applicative 的类型存储在其异构列表的单独类型参数中,并且在使用生成的转换时始终为(Identity)。所以我需要映射 hlist 并I
从元素中删除 ,这将有效地将 Applicative 移动I
到提到的类型参数(它将是Comp IO Maybe
),所以我可以使用hsequence
,最后加回I
s 以便我可以隐蔽回记录.
但是我不知道如何为I
删除/添加函数编写类型签名,该函数表明各个 hlist 元素的类型通过丢失/获得外部类型而不断变化。这甚至可能吗?
haskell - 同时导出 Generic 和 ToJSON?
我有一个模块Foo.hs
,其中包含一个不派生的定义Generic
:
在另一个模块中我想派生ToJSON
:
但它不编译。如果我在定义站点导出 Generic,Foo.hs
我稍后可以ToJSON
在另一个模块中导出。
我可以ToJSON Blather
在Bar.hs
不修改原件的情况下推导出来Foo.hs
吗?
或者有没有简单instance ToJSON Blather
的手写方式?