In Haskell "positional" list functions treat negative values as zero: > take (-1) "abc" "" > drop (-2) "xyz" "xyz" So, its idiomatic of splitAt to follow Haskell's precedent rather than Python's.