Проблема с DataKinds
Я создал очень простой пример проблемы, с которой я сталкиваюсь, используя GADT и DataKinds. Мое реальное приложение, очевидно, более сложное, но оно четко отражает суть моей ситуации. Я пытаюсь создать функцию, которая может возвращать любое из значений (T1, T2) типа Test. Есть ли способ сделать это или я попадаю в область зависимых типов? Вопросы здесь кажутся похожими, но я не смог найти (или понять) ответ на мой вопрос от них. Я только начинаю понимать эти расширения GHC. Благодарю.
{-# LANGUAGE GADTs, DataKinds, FlexibleInstances, KindSignatures #-}
module Test where
data TIdx = TI | TD
data Test :: TIdx -> * where
T1 :: Int -> Test TI
T2 :: Double -> Test TD
type T1 = Test TI
type T2 = Test TD
prob :: T1 -> T2 -> Test TIdx
prob x y = undefined
---- вот ошибка ---- Test.hs: 14: 26:
Kind mis-match
The first argument of `Test' should have kind `TIdx',
but `TIdx' has kind `*'
In the type signature for `prob': prob :: T1 -> T2 -> Test TIdx