[Haskell-cafe] Re: Strange space leak
carette at mcmaster.ca
Wed Jul 16 09:03:10 EDT 2008
> Grzegorz Chrupala wrote:
>>> split "<DOC>" . words . map toLower = (:) . words . map toLower
>>> Since you converted everything to lowercase, the string "<DOC>" will
>>> never appear in the text, resulting in a single huge document.
>> Oops, that should have been obvious, sorry for the dumb question.
> No problem, it was not obvious to me and I had fun trying to figure it
> out :)
Speaking of not obvious: Haskell's type system catches a lot of bugs --
but still gives no help with this particular 'problem'. But one can
easily imagine an extension to a type system which could have detected
that "<DOC>" can never occur in the result of words . map toLower, and
then with a bit more work [type-level Nat], the type of the full
expression could have encoded that the result is always going to be of
length 1. That would surely have been a good hint that something
non-trivial was going on.
Whether a Haskell-friendly type system extension could be
created/implemented which would cover this example, I don't know.
However, I have had a lot of fun with the underlying idea: anytime
someone encounters a bug in their code (and relates the debugging story
on haskell-cafe), try to imagine how the type system could be extended
to automate that. In most cases, I don't mean to have the type system
reject the code, but rather to have an inferred type that would make it
obvious that the code did not behave as expected.
More information about the Haskell-Cafe