|
|
1
2
以下是如何获取所有兼容字段的列表:
您使用的产品类型应该派生
唯一的警告是我想不出一个方法
编译时
请求不存在的字段时出错。我们需要某种编译时版本的
|
|
2
2
一个解决方案是
generic-lens
. 特别地,
|
|
3
2
根据@Li-yao庠Xia的回答,这是有可能的
方法
通过同构型
无可否认,这有点疯狂,但这种嵌套类型的大多数都包含由
这有助于显示表示的结构。
无论如何,要编写泛型函数,您可以创建一个类型类,它可以处理
在我们的例子中,我们将定义一个类型类
现在,我们不需要
我们需要一个实例来处理元数据:
因为所有的元数据包装器(
我们还需要一个来处理产品:
这只会把
我们需要一个实例来获取
以及将处理错误类型字段的重叠catch all:
我们还可以选择在这些表示中处理其他可能的类型构造函数(即,
总之,有了这些实例,我们可以写:
这很管用:
但正如@luqui基于
为了解决这个问题,我们可以引入一个类型族来计算数据结构
使用类型族的常用定义
现在我们得到一个错误字段的编译时错误:
总之,把所有的东西放在一起,添加实例和
给:
|
|
|
4
0
根据Haskell 98标准,这是不可能的。通常,参数化函数不能基于它变成的具体类型更改行为。它必须保持通用性。 作为一个思考过程,为什么会出现这种情况:
什么应该
现在,我并不是说一个对GHC扩展有着深厚知识的程序员的一些妙招无法实现这一点,但是使用标准的Hindley Milner typechecker是不可能的。 |
|
|
user5315444 · C#,通用,访问属性 9 年前 |
|
Tomilov Anatoliy · 按T匹配nullptr* 10 年前 |
|
Itachi · Objective-C-轻量级泛型可以包含多个类型吗? 10 年前 |
|
|
Spiros · 命名空间作为CUDA中的模板参数 11 年前 |
|
|
AhSeng Fan · C泛型错误-“_Bool”之前应为表达式 11 年前 |
|
|
Sss · c#中泛型类型<T>出现未处理的异常,因为文件大小不是字节的倍数 12 年前 |