fact: Fixpoint curry {D R} {struct D} : asFunc D R -> (asTuple D -> R) := match D as D return asFunc D R -> (asTuple D -> R) with | nil => fun x _ => x | d :: D => fun f x => curry (f (fst x)) (snd x) end.
imports: Coq.Lists.List ExtLib.Data.Member