【发布时间】:2011-09-01 07:07:31
【问题描述】:
我正在尝试创建一些 Haskell 类型,这些类型不是按类型而是按类型的元素(特别是整数)参数化的。例如,R^2 中的(线性代数)向量和 R^3 中的向量是不同类型的对象。具体来说,我正在用 Haskell 编写一个 K-D 树,我想用一个正整数参数化我的数据结构,因此 3-D 树和 4-D 树具有不同的类型。
我尝试通过元组对我的树进行参数化,但它似乎并没有去任何地方(而且这似乎不太可能被推动,特别是因为它似乎没有三元组或任何更大的东西函子(我不知道如何说,例如 HomogeneousTuple a => Functor a)。我想做这样的事情:
data (TupleOfDoubles a) => KDTree a b = ... ---so in a 3DTree a is (Double,Double,Double)
那会很好,或者类似的东西也一样好
data KDTree Int a = ... -- The Int is k, so KDTree has kind Int -> * -> *
有人知道这些效果是否可行或合理吗?
谢谢 -约瑟夫
【问题讨论】:
-
附注,您可能对一些关于依赖类型的文献感兴趣,这是一种从值到类型的更一般的函数:我喜欢 cse.chalmers.se/~peterd/papers/DependentTypesAtWork.pdf
-
感谢阿莫斯,这似乎是我可以使用的东西
标签: haskell kdtree algebraic-data-types higher-kinded-types