packages feed

dhall-1.33.0: dhall-lang/Prelude/Natural/fold

{-
`fold` is the primitive function for consuming `Natural` numbers

If you treat the number `3` as `succ (succ (succ zero))` then a `fold` just
replaces each `succ` and `zero` with something else
-}
let fold
    : Natural →
      ∀(natural : Type) →
      ∀(succ : natural → natural) →
      ∀(zero : natural) →
        natural
    = Natural/fold

let example0 = assert : fold 3 Natural (λ(x : Natural) → 5 * x) 1 ≡ 125

let example1 =
        assert
      :   (λ(zero : Natural) → fold 3 Natural (λ(x : Natural) → 5 * x) zero)
        ≡ (λ(zero : Natural) → 5 * (5 * (5 * zero)))

let example2 =
        assert
      :   ( λ(natural : Type) →
            λ(succ : natural → natural) →
            λ(zero : natural) →
              fold 3 natural succ zero
          )
        ≡ ( λ(natural : Type) →
            λ(succ : natural → natural) →
            λ(zero : natural) →
              succ (succ (succ zero))
          )

in  fold