3
在下面的代碼編譯錯誤,T1
和T2
編譯罰款,但T3
失敗:型家庭,GADTs並命名爲記錄
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeFamilies #-}
type family F a
data T1 b where
T1 :: a -> T1 (F a)
data T2 b where
T2 :: { x2 :: a } -> T2 a
data T3 b where
T3 :: { x3 :: a } -> T3 (F a)
我試圖理解爲什麼。 T3
只是T1
但帶有一個已命名的記錄。這似乎沒有那麼特別,因爲可以使用構造函數語法來提取它。
這些例子可能看起來很愚蠢,但在我的代碼中有a
的限制,例如, (Show a)
,所以這些值可以在提取時使用。