(Хотел поместить тему в Talks, но LOR выдаёт 403.)
В процессе чтения LYAH и Typeclassopedia постоянно натыкался на фразы типа «следовало бы сделать так-то, но по историческим причинам реализовано так-то». Особенно в Typeclassopedia такого много. Например, все монады должны по идее являться также функторами и Applicative, но из-за того, что монады появились в языке раньше и бла-бла-бла, монады официально не являются ни Functor, ни Applicative и, как следствие, реализуют уже реализованное (напр. return — это pure из Applicative, liftM — ничто иное, как fmap из Functor. То есть можно было просто «унаследовать» их, но по историческим причинам этого не делается). Там ещё много подобных примеров, не вижу смысла всех перечислять.
Мне вот интересно, почему разработчики Хаскеля такие консервативные? Почему они не хотят сбросить с себя груз истории и реализовать всё как следует?
Слышал, что готовится замена стандарту Haskell 98. Кто знает, там в этом отношении что-то будут менять или опять оставят в дань истории?