Prelude показывает примеры для take
и drop
с отрицательными аргументами:
take (-1) [1,2] == []
drop (-1) [1,2] == [1,2]
Почему они определены так, как они есть, когда, например, x !! (-1)
делает "безопасную" вещь и падает? Это похоже на хакерский и очень не-Haskell-подобный способ сделать эти функции полными, даже если аргумент не имеет смысла. Есть ли еще одна философия дизайна, которую я не вижу? Является ли это поведение гарантированным стандартом, или именно так GHC решил его реализовать?