In a quick experiment, the following definition runs circles around the current implementation of `upTo` ```agda goUpTo : ℕ → ℕ → List ℕ goUpTo _ 0 = [] goUpTo n (suc i) = n ∷ goUpTo (suc n) i upTo′ : ℕ → List ℕ upTo′ = goUpTo 0 ``` I suspect this is because `applyUpTo` builds huge closures.