{-
`build` is the inverse of `fold`
-}
let build
    :   ∀(a : Type)
      → (∀(list : Type) → ∀(cons : a → list → list) → ∀(nil : list) → list)
      → List a
    = List/build

let example0 =
        assert
      :   build
            Text
            (   λ(list : Type)
              → λ(cons : Text → list → list)
              → λ(nil : list)
              → cons "ABC" (cons "DEF" nil)
            )
        ≡ [ "ABC", "DEF" ]

let example1 =
        assert
      :   build
            Text
            (   λ(list : Type)
              → λ(cons : Text → list → list)
              → λ(nil : list)
              → nil
            )
        ≡ ([] : List Text)

in  build
