
On 2008.08.23 17:33:55 -0000, kahl@cas.mcmaster.ca scribbled 0.9K characters:
Neil Mitchell
wrote: Hi
The Prelude functions drop, take, and splitAt are unfailing (never call error). This patch changes the Data.List generic versions to behave the same way. At present, they call error on negative arguments.
I had always just assumed that take and genericTake did the same thing, so had never even realised this problem existed. I'd call this a bug, that needs fixing.
Maybe the bug is in 'drop', 'take' and 'splitAt' and it was intended to fix it in 'generic' variants. Is there a good reason why to ignore negative number arguments? It may hide bugs.
A similar argument could be made against ``take 5 [] = []''.
A different solution would be using Nat or Natural as arguments here --- then the conversion introduces an obvious place to check for errors.
Wolfram
I've actually long wondered about this: why don't more functions use Nat where it'd make sense? It can't be because Nat is hard to define - I'd swear I've seen many definitions of Nat (if not dozens when you count all the type-level exercises which include one). -- gwern ISSSP SADT NSV Rachel HAMASMOIS & Lindows wire ASPIC clandestine