通用数据函数
近似于熟悉的术语级函数的泛型函数。泛型处理产品表示的总和,并为基本情况设置“孔”,必须由用户通过类型类填充。也许你也会想到这些是“可重用”或“通用”泛型。
最适用于简单的解析和打印/序列化/减少任务,其中对于给定的数据类型,唯一需要做的“工作”是机械字段排序。如果您需要更多的逻辑(并且不能将其放在types/newtypes中)将无法使用此库。
重点是类型安全和性能。值得注意的是,对于和类型泛型,我们允许在类型级别上解析构造函数名称(通过有症状的). 对于您为了实现您自己的高性能和类型处理,我们提供通用。数据。FOnCstr公司
.
理论基础
有许多相互竞争的解析和序列化Haskell库。大多数都有一个用于枚举允许类型的类型类,以及一些简单的泛型使用该类型类作为基本案例。除了基本情况,每个人正在编写大致相同的通用代码。
在编写自己的库时,我意识到如果其他开发人员想要使用我的序列化程序,他们可能需要为base编写自己的类型类案例(由于某些特定的库设计)。唉,这意味着他们必须复制我的泛型并交换类型类。非常愚蠢。但事实证明我的泛型在其他方面非常通用,所以我将它们拆分到这个库中。现在,您可以通过填充一些洞来交换类型类。
设计说明
Sum类型是通过在Sum标记前面加上前缀来处理的
除非另有规定,否则这就是我们消除构造函数歧义的方法。如何从构造函数解析sum标记取决于用户(可以在如果愿意,可以输入level)。
功能
foldMap(折叠地图)
(左->右)
foldMap::(可折叠t,单体m)=>(a->m)->ta->m
用户提供a->米
字典通过一个特殊的类型类实例。构造函数字段从左到右进行映射和组合。总和表示法通过用户提供的映射挂起构造函数来处理字符串->m
第一。
适用于:
- 只将字段连接在一起的简单二进制序列化程序
- 减少为数值
导线
(L->R)
遍历::(可遍历t,适用f)=>(a->f b)->t a->f(t b)
用户提供财务报表
字典通过一个特殊的类型类实例。构造函数字段操作从左到右运行。总和表示是通过首先运行构造函数操作来处理的(因此需要莫纳德f
).
适用于:
- 可以解析泛型的简单二进制解析器
foldMap(折叠地图)
输出
对立面
我不知道这到底是什么。就像是对映?
笔记
孤立实例
此库设计用于使用现有库和类型类。因此,你很可能会遇到孤儿。实例,就是这样生活,吉姆。
时髦的泛型
我在这个图书馆里做了一些奇怪的设计选择。这里有一些基本原理。
处理类型和术语级别的不良
我不喜欢在配置不良的泛型用法上默默地出错,例如询问对于空数据类型的泛型函数。最初是我做的类型错误,就是这样。但这意味着我会写同样的实例一次又一次。这个需求隐藏在一个类型类实现中。真的,如果我能把这些需求直接放在具有它们的函数。
我做到了。现在,毫无疑问表示错误例如,您尝试使用sum类型上的非sum泛型,我们运行时出错。然而,有一个单独的制作层关于类型的泛型表示的断言水平,强烈建议使用。
注意,如果您想在泛型函数上编写包装器来填充某些信息,你的工作变得更难看了。索兹。任何类型的内容安全我的甜心。
许可证
根据麻省理工学院许可证提供。请参见许可证
用于许可证文本。