Haskell 中有没有一种方法可以用另一个类型的值参数化一个类型?

问题描述 投票:0回答:1

我有一个类型 A 和一个代表一对 A 的关联类型,具体来说是 (A, A)。我还有一个针对此对类型的智能构造函数,它接受一组 A 和 A 的两个值。构造函数执行一些检查(例如,确保值属于该集合)并返回第二个和第三个参数的对,如果检查通过了。

我想跟踪用于创建对类型值的集合,但我想避免将该集合存储在对类型的每个实例中。我正在考虑通过与 A 集合对应的类型来参数化对类型。这在 Haskell 中可行吗?

澄清:

假设有两个整数列表,[1, 2, 3] 和 [1, 2, 4]。我有一个智能构造函数,它接受一个整数列表和两个整数。

构造函数返回一对整数。例如,使用第一个列表 [1, 2, 3] 和 1 和 2,第二个列表 [1, 2, 4] 和 1 和 2,都成功返回对 (1, 2)。

但是,在当前设置中,生成的对丢失了用于创建它们的列表的上下文。

目标: 我想调整类型,以便根据用于创建它的列表来区分生成的对,但我不想将列表存储在调整后的第二类型的每个值中。

更新:可能的解决方案:DataKinds 扩展似乎可以满足我的需要。

haskell functional-programming
1个回答
0
投票

查看 Ghosts of Departed Proofs,它就是使用

ST
使用的幻影存在类型技巧的泛化来完成这类事情。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.