type HListFix[t <: NatFunc, r] = t match {
case NatFuncPositive[IsFinishAndNothing, tail] => EmptyTuple case NatFuncPositive[d, tail] => d => r*:HListFix[tail, r]
}
type TakeHead[t <: NatFunc] = t match {
case NatFuncPositive[d, tail] => d
}
type TakeTail[t <: NatFunc] = t match {
case NatFuncPositive[d, tail] => tail
}