¿Por qué no podemos definir familias de datos cerrados?
Todo el siguiente trabajo:
{-# 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!
... pero esto no (a partir de 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
| ^^^^^
¿Es solo que nadie se ha molestado en implementar esto todavía, o hay una razón particular por la que no tendría sentido cerrar las familias de datos? Tengo una familia de datos donde preferiría mantener la inyectividad, pero también la oportunidad de hacer una instancia disyuntiva global. En este momento, la única forma en que veo que esto funcione es
newtype CDF' a = CDF' (CTF a)