fact: Fixpoint dataMatch (T : Type) (X : T -> Type) (d : data X) {struct d} : forall (R : Type), dataP d R -> dataD d -> R := match d as d return forall (R : Type), dataP d R -> dataD d -> R with | Inj _ _ => fun _ p => p | Get X x => fun _ p => p | @Prod _ _ l r => fun _ p v => dataMatch r _ (dataMatch l _ p (fst v)) (snd v) | @Sigma _ _ i d => fun _ p v => match v with | existT _ x y => dataMatch (d x) _ (p _) y end | @Pi _ _ i d => fun _ p v => p v end.
imports: String List ExtLib.Data.HList