我創建了一個非常簡單的問題示例,我使用的是GADT和DataKinds。我的真實應用顯然更復雜,但這清楚地表明瞭我的情況的本質。我試圖創建一個函數,可以返回任何類型的值(T1,T2)的測試。有沒有辦法做到這一點,還是我進入依賴類型的領域?這裏的問題看起來很相似,但我無法從他們那裏找到(或理解)我的問題的答案。我剛剛開始瞭解這些GHC擴展。謝謝。DataKinds故障
{-# 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
'prob'的語義應該是什麼?它應該做什麼? – 2013-02-17 07:27:19
我添加了GHCI錯誤消息。這是一個完全人爲的例子。我希望能夠根據某些計算返回Test(測試TI或測試TD)的任何值。 – MFlamer 2013-02-17 07:37:31
我試圖猜測你想要做什麼,但最好能描述一下你想達到的目標。一旦你的意圖清楚,立刻舉例就好了。 – 2013-02-17 07:49:55