Проблема с DataKinds

Я создал очень простой пример проблемы, с которой я сталкиваюсь, используя GADT и DataKinds. Мое реальное приложение, очевидно, более сложное, но оно четко отражает суть моей ситуации. Я пытаюсь создать функцию, которая может возвращать любое из значений (T1, T2) типа Test. Есть ли способ сделать это или я попадаю в область зависимых типов? Вопросы здесь кажутся похожими, но я не смог найти (или понять) ответ на мой вопрос от них. Я только начинаю понимать эти расширения GHC. Благодарю.

аналогичный вопрос 1

аналогичный вопрос 2

{-# 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

Ответы на вопрос(2)

Ваш ответ на вопрос