Необходимость изучать расширение языка haskell для производства

10

Базовый язык Haskell действительно прост. Исходя из опыта OO, основная трудность заключается в адаптации к чисто функциональной парадигме.

Изучая «базовый» язык Haskell, я всегда рассматривал языковые расширения как игрушки для людей CS или как эксперименты для будущих версий языка (как from future import ???в python).

Однако когда я начал изучать веб-фреймворки, такие как Yesod, я обнаружил, что для многих исходных файлов требуется расширение от 3 до 4. Некоторые выглядят довольно просто (StringOverload). Другие действительно пугающие (GADT, Type Famillies, Template Haskell). Их документация связана с исследовательскими работами, что пугает тех, кто ожидает «просто» новой библиотеки.

Нужно ли учить расширения языка GHC, чтобы быть продуктивным в Haskell? Если бы вы наняли разработчика на Haskell для производственного приложения, спросили бы вы об этом?

Саймон Бергот
источник

Ответы:

7

Нужно ли учить расширения языка GHC, чтобы быть продуктивным в Haskell?

Да. И это верно для любого языка / инструмента. Обладая базовыми / базовыми знаниями, вы можете решить задачи онлайн-конкурса, это может быть небольшой университетский проект, но определенно не реальное приложение.

Если бы вы наняли разработчика HASKELL для производственного применения, спросили бы вы об этом?

Теперь это зависит от того, есть ли у вас человек, который может поделиться этими знаниями. Если да, то этот человек может нарастить нового сотрудника. Если нет, то вы должны сначала получить такого человека со знанием. И снова это верно для новых технологий.

Конечно, вы также можете попытаться нанять людей, обладающих такими глубокими знаниями в Хаскеле. Но поскольку Haskell относительно новичок в отрасли и, учитывая, что вокруг него было реализовано очень мало коммерческих проектов, найти такого человека будет сложно. Эффективный способ создать команду профессионалов в Хаскелле - это нанять людей, знающих основы и желающих работать в Хаскеле, а затем обучить их.

Маной Р
источник
Я собирался протестовать, но потом я увидел, что в реальном мире Хаскелл учит многим языковым расширениям. Спасибо за ваш ответ.
Саймон Бергот
2
«И это верно для любого языка / инструмента» - это совершенно неверно. Скажем, возьмите такие языки, как Java, C #, C ++ - ни один из них не имеет языковых расширений, которые обычно встречаются в коде приложений реального мира. Если вам нужно использовать языковые расширения каждый раз, когда вам нужно написать что-нибудь менее тривиальное, чем «решения проблем онлайн-конкурса», то, на мой взгляд, в спецификации языка есть что-то не так.
Малкольм
@Malcolm Почему вы находите «Если вам нужно использовать языковые расширения каждый раз, когда вам нужно написать что-нибудь менее тривиальное, чем« решения проблем онлайн-конкурса », на мой взгляд, в спецификации языка есть что-то очень неправильное». быть правдой? Какая характеристика расширения делает его отрицательным? Я использую GHC и предоставленные расширения. Добавление расширения к существующему проекту кажется таким же обременительным, как и добавление другой библиотеки.
Даворак
2
@Davorak Потому что вместо одного языка у нас есть миллион различных комбинаций расширений, и вы ничего не знаете о том, собирается ли код компилироваться на определенном компиляторе. Расширения делают код не переносимым. А также это делает язык трудным для изучения, потому что вместо единого набора функций, который используют все, есть огромное количество дополнительных функций, и вы не знаете, какие из них вы должны знать и какие использовать, а какие существуют просто потому что исследователи веселятся.
Малкольм
2
@Davorak Это именно та проблема, о которой я говорю: все используют GHC, потому что это единственный все еще активно поддерживаемый компилятор. Другие компиляторы не могут идти в ногу, поэтому никто не может их использовать, и нет особых причин вкладывать в них средства. Что касается библиотек: вы выбираете библиотеки для проблемы и работаете только с ними. Скажем, если вам нужно читать XML, вам нужна только одна библиотека для чтения XML. Однако с расширениями не очевидно, когда вам нужно что. Хотя есть проблема и с библиотеками. Скажем, в Java есть только массивы и коллекции, а в Haskell есть множество библиотек массивов.
Малкольм