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