我创建了一个非常简单的示例,说明我在使用 GADT 和 DataKinds 时遇到的问题。我的实际应用程序显然更复杂,但这清楚地抓住了我的情况的本质。我正在尝试创建一个可以返回任何类型为 Test 的值(T1,T2)的函数。有没有办法做到这一点,或者我正在进入依赖类型的领域?这里的问题看起来很相似,但我无法从他们那里找到(或理解)我的问题的答案。我刚刚开始了解这些 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