該數據類型可以有type role HCons' representational representational
,允許使用coerce
添加或刪除應用於元素的新類型,而不需要遍歷列表。這個GADT實際上是否具有代表性的類型角色
data HNil' = HNil'
data HCons' a b = HCons' a b
然而,對於這些列表的語法是不是像你一樣的有以下GADT
data HList (l::[*]) where
HNil :: HList '[]
HCons :: e -> HList l -> HList (e ': l)
我有一類convert between these two representations,這樣Prime (HList [a,b]) ~ HCons' a (HCons' b HNil')
。請問這種類型的產品是
coerceHList :: Coercible (Prime a) (Prime b) => HList a -> HList b
coerceHList = unsafeCoerce
安全嗎?
FWIW,是的,我認爲是。但是我對角色的內部知識不夠了解,無法真正做出令人信服的論證。你的例子似乎是當前角色系統不夠充分表達的另一種情況。 – kosmikus