когда я посмотрел исходный код.
Почему в библиотеке присутствует две реализации и чем они отличаются?
вот первая:
init :: HasCallStack => [a] -> [a]
init [x] = []
init (x:xs) = x : init xs
init [] = errorEmptyList "init"
Вот вторая:
init [] = errorEmptyList "init"
init (x:xs) = init' x xs
where init' _ [] = []
init' y (z:zs) = y : init' z zs
Там же прагма стоит, выбирается реализация в зависимости от наличия USE_REPORT_PRELUDE
это не объясняет, почему пришлось придумать две разные реализаци
Обсуждают сегодня