Грамотный Хаскель (.lhs) и Пикша - PullRequest
38 голосов
/ 25 апреля 2010

В настоящее время я использую только Haddock, но, увидев несколько действительно интересных примеров (например, этот гист ) грамотного Хаскелла, мне интересно попробовать его в проекте.

Вопросы, которые я получил:

  • Что ты пишешь как комментарии Хэддока и что ты пишешь в грамотной части?

  • Как вы масштабируете грамотное программирование для нескольких файлов? Может кто-нибудь указать мне пример, где грамотное программирование используется в пакете с несколькими модулями? Каков ваш опыт использования грамотного программирования в больших пакетах?

  • Какой вкус (уценка, латекс, ...) грамотного Хаскелла предпочтительнее?

  • Почему вы программируете на грамотном Хаскеле или обычном ванильном Хаскеле? Вы программируете в обоих стилях и если да, то почему?

  • Вы предпочитаете блочный стиль (\begin{code}) или птичий стиль (>)? Почему?

Ответы [ 2 ]

35 голосов
/ 25 апреля 2010

Раньше я писал много грамотных программ .

Что ты пишешь как комментарии Хэддока и что ты пишешь в грамотной части?

Документация по внешнему API входит в комментарии Haddock. Все остальное переходит в грамотную часть. «Все остальное» может включать в себя:

  • Внутренние инварианты структур данных
  • Почему вы делаете вещи таким образом
  • Что такое дизайн кода
  • Почему был выбран этот дизайн, какие другие проекты были опробованы и найдены нужными

Как вы масштабируете грамотное программирование на несколько файлов?

Так же, как вы масштабируете большой документ LaTeX на несколько файлов: один файл на модуль, а затем гигантский файл, который \include их всех.

Может кто-нибудь указать мне пример, где грамотное программирование используется в пакете с несколькими модулями?

Это не Haskell, а Quick C-- компилятор - большая функциональная программа, написанная с использованием грамотного программирования.

Какой у вас опыт использования грамотного программирования в больших пакетах?

Грамотное программирование очень хорошо подходит для документирования сложных, сложных или сложных модулей. Для большинства простых модулей достаточно документации внешнего API (например, Haddock). И ни одна грамотная программа на самом деле не даст вам общую картину дизайна, который содержит более десятка модулей. Для этого вам понадобятся другие инструменты и техники.

Какой вкус (уценка, латекс, ...) грамотного Хаскелла предпочтительнее?

Если вы делаете такие крупные инвестиции, я бы определенно выбрал LaTeX только из-за математических способностей и в целом большей мощи инструмента.

Почему вы программируете на грамотном Haskell или обычном ванильном Haskell? Вы программируете в обоих стилях и если да, то почему?

Мои коды на Haskell почти всегда просто ванильные, по двум причинам:

  • Я работаю со старшими людьми, которые имеют больше опыта в Haskell, и они отказались от грамотного Haskell. Только самые старые модули в их системе имеют шанс быть .lhs.

  • Для Haskell грамотное программирование является излишним. Одним из больших преимуществ инструмента грамотного программирования является то, что вы освобождаетесь от любых ограничений, которые определение компилятора или языка может накладывать на порядок появления вашего кода. Но у Haskell таких ограничений практически нет: перед использованием нет определения, и для типичного определения функции у меня есть выбор вспомогательных имен let или where (или обоих). Грамотное программирование никогда не было просто модными комментариями, а с "грамотным" Haskell это все, что вы получаете. Это не стоит беспокоиться.

Вы предпочитаете блочный стиль (\ begin {code}) или птичий стиль (>)? Почему?

Я настоятельно предпочитаю стиль блока:

  • Это примерно совместимо с любым другим инструментом грамотного программирования на планете. (Следы птиц уникальны для Хаскелла.)

  • Мой редактор лучше справляется со стилем блоков.

11 голосов
/ 01 марта 2012

Если вы намереваетесь делиться программами в Интернете, я считаю, что комбинация грамотного языка Haskell в стиле уценки с mathjax будет отличной комбинацией. Программа «Pandoc» очень хороша для того, чтобы использовать эту «markdown + lhs» в любом формате, который вы пожелаете, включая PDF или HTML. Если вы скажете Pandoc выводить в HTML, вы можете использовать -mathjax (или другие подобные флаги, если хотите), чтобы ваши латексные математические формулы отображались.

При использовании этого стиля, я считаю, что стиль птицы предпочтительнее, потому что он просто более читабелен для меня и, кажется, лучше соответствует стилю уценки.

Преимущество использования Pandoc с уценкой состоит в том, что вы можете добавлять цитаты в свой код, математические формулы и иметь действительно переносимый формат. Вы можете создать что-то похожее на научную исследовательскую работу, но выполнимое и также может быть размещено в блогах / вики / веб-сайтах.

Чтобы дать Норману альтернативную точку зрения, когда он говорит, что грамотное программирование полезно для более четкой компоновки кода, можно утверждать, что Haskell достаточно выразителен, и проблемы, которые вы решаете с помощью кода, действительно интересны и могут быть действительно полезны, будучи окруженными с пояснительным текстом. Подумайте о математическом исследовании. Хорошие статьи по чистой математике содержат много текста для объяснения мотивации или более высокого уровня интерпретации того, что означает математическая запись. Например, в статье об уравнениях Навье-Стокса было бы очень полезно окружить обозначения уравнений текстом, объясняющим, как это связано с сохранением импульса Ньютона.

Таким образом, я добился большого успеха и рекомендую использовать стиль markdown + lhs, знаки доллара для встраивания латексных математических формул, стиля птицы и pandoc. Я бы порекомендовал писать программы, как если бы они были исследовательскими работами, и относился бы к самому хаскелю, как к математическим выражениям в исследовательской работе.

...