[Haskell-cafe] naturally, length :: a -> Int

Henning Thielemann lemming at henning-thielemann.de
Mon Mar 1 17:11:20 UTC 2021

On Mon, 1 Mar 2021, Johannes Waldmann wrote:

> So, what do you do?   (Yes, Peano numerals ...)
> Or, how do we convince ourselves (and our students)
> of keeping the current status?

A poor man's definition of peano numbers is:
   type Peano = [()]

'length xs' becomes:
   map (const ()) xs
   () <$ xs
   void xs

(+) becomes (++)
(*) becomes liftA2 const
(-) becomes \xs ys -> foldl (flip drop) ys (1<$xs)

My experience with Word is that it makes things even worse. It is neither 
compatible with Int nor has it bound checks. It happens pretty easily that 
in an intermediate result is negative although the whole expression of 
type Word is always non-negative.

I would prefer to use Liquid Haskell and restrict Int to non-negative 
numbers. This would solve both problems.

More information about the Haskell-Cafe mailing list