[Haskell-cafe] naturally, length :: a -> Int
Jaro Reinders
jaro.reinders at gmail.com
Tue Mar 2 16:48:11 UTC 2021
There was a great talk about this at PWLConf 2019 by José Manuel Calderón
Trilla: "What about the Natural Numbers?"
There is a recording on YouTube: https://www.youtube.com/watch?v=jFk1qpr1ytk
I think we should not be so quick to give up theoretical elegance and
simplicity for the sake of performance (especially not in a language like
Haskell). If we would make a change then I would prefer using the lazy and
possibly infinite natural numbers with pattern synonyms for successor and zero.
Like the existing Integer but then lazy, so more programs will terminate, for
example a program that checks if the length of a finite list is smaller than
the length of an infinite list.
And if we make the change we will probably also need something like
Linear.Affine from the linear package with an instance for these natural
numbers where the difference between two naturals is an Integer. That would
hopefully make it reasonably easy to convert naturals to and from integers.
I hope that some of the performance concerns can be tackled by compiler
optimizations, for example, detecting when naturals are used in tight loops
which can be safely replaced by machine words, similar to strictness analysis
and unboxing. And of course programmers can choose to use the old unsafe
machine words/ints manually.
More information about the Haskell-Cafe
mailing list