в соответствии с отчет Haskell 2010, init
определяется как следующее:
init :: [a] -> [a]
init [x] = []
init (x:xs) = x : init xs
init [] = error "Prelude.init: empty list"
base-4.4.1.0 определяет его аналогичным образом. Для меня, кажется, было бы совершенно приемлемо и интуитивно иметь:
init [] = []
который сделает init
общей функцией. Поскольку это определение попало в отчет haskell 2010, я думаю, что для него есть аргументы. Это тот случай или он определен таким образом из-за традиции и обратной совместимости?