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

Johannes Waldmann johannes.waldmann at htwk-leipzig.de
Tue Mar 2 14:53:34 UTC 2021


Dear Cafe,


thanks for ideas and arguments.


> [Ben Franksen] I would support a move Int->Word in all libraries
> where that makes sense.

I find it hard to think of a library where that does NOT make sense...


The following is somewhat related but actually orthogonal:
I mentioned that numbers often arise as cardinalities
(so they are natural, by definition) and serve as pointers.
The next step is then: pointer type safety. Vincent Hanquez' Foundation
https://hackage.haskell.org/package/foundation-0.0.25  defines

class (IsList c, Item c ~ Element c) => Collection c where
  length :: c -> CountOf (Element c)
class ( ... Collection c) => Sequential c where
  take :: CountOf (Element c) -> c -> c

with   newtype CountOf ty (and there's also   newtype Offset ty)

I tend to agree. The phantom type argument for CountOf
would catch errors like adding the number of students
to the number of exercises (in my application).

(Well and the next step after that would be to have
the size of the collection in the (dependent) type as well.)

Current implementation is  newtype CountOf ty = CountOf Int
and the author adds (and that was also the point I was making)
"Int is a terrible backing type which is hard  to get away from,
considering that GHC/Haskell are mostly using  this for [counting
and] offset. Trying to bring some sanity by a lightweight wrapping."


NB: I found out about this from Michael Snoyman's
(very much entertaining, and too much true)
https://www.snoyman.com/blog/2020/12/haskell-bad-parts-3/


Best regards, J.W.


More information about the Haskell-Cafe mailing list