Dieser Datentyp kann type role HCons' representational representational
, die Verwendung von coerce
ermöglicht Hinzufügen oder Entfernen von newtypes auf die Elemente angewendet, ohne die Liste durchlaufen müssen.hat diese GADT tatsächlich Typ representational
data HNil' = HNil'
data HCons' a b = HCons' a b
jedoch die Syntax für diese Listen ist nicht so schön wie die mit der folgenden GADT
data HList (l::[*]) where
HNil :: HList '[]
HCons :: e -> HList l -> HList (e ': l)
ich eine Klasse zu convert between these two representations habe, so dass Prime (HList [a,b]) ~ HCons' a (HCons' b HNil')
. Macht diese Klasse
coerceHList :: Coercible (Prime a) (Prime b) => HList a -> HList b
coerceHList = unsafeCoerce
sicher?
FWIW, ja, ich denke schon. Aber ich weiß nicht genug über das Innere von Rollen, um tatsächlich ein überzeugendes Argument zu liefern. Ihr Beispiel scheint ein weiterer Fall zu sein, in dem das derzeitige Rollensystem nicht sehr ausdrucksvoll genug ist. – kosmikus