以下所有工作:
{-# LANGUAGE TypeFamilies #-}
type family TF a
type instance TF Int = String
type instance TF Bool = Char
data family DF a
data instance DF Int = DFInt String
data instance DF Bool = DFBool Char
type family CTF a where
CTF Int = String
CTF Bool = Char
CTF a = Double -- Overlap OK!
...但这不是(从 GHC-8.2 开始):
data family CDF a where
CDF Int = CDFInt String
CDF Bool = CDFBool Char
CDF a = CDFOther Double
wtmpf-file24527.hs:16:19: error: parse error on input ‘where’
|
16 | data family CDF a where
| ^^^^^
只是没有人费心去实现这一点,还是有什么特殊原因导致关闭数据家族没有意义?我有一个数据系列,我希望保持注入性,但也有机会制作一个不相交的包罗万象的实例。现在,我认为完成这项工作的唯一方法是
newtype CDF' a = CDF' (CTF a)