Я пытаюсь создать некоторые типы Haskell, которые параметризуются не типами, а элементами типа, в частности, целыми числами.Например, вектор (линейной алгебры) в R ^ 2 и вектор в R ^ 3 являются различными типизированными объектами.В частности, я пишу KD-дерево на Haskell, и я хочу параметризовать мою структуру данных с помощью положительного целого числа, чтобы 3-D дерево и 4-D дерево имели разные типы.
Я пытался параметризовать свое дерево с помощью кортежей, но оно, похоже, никуда не денется (и кажется маловероятным, что это можно будет протолкнуть, тем более что не похоже, что это утроится или что-то еще).больше даже функторы (и я не знаю, как сказать, например, экземпляр HomogeneTuple 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 -> * -> *
Кто-нибудь знает, является ли какой-либо из этих эффектов осуществимым или разумным?
Спасибо -Joseph