Практическое применение "Бананов, линз, конвертов и колючей проволоки"?
Прежде всего, название goofy напрямую ссылается на эту статью:
http://eprints.eemcs.utwente.nl/7281/01/db-utwente-40501F46.pdf
Я понимаю теоретическое значение этого, поскольку он моделирует большинство, если не все, семантику программирования.
Какие проблемы наиболее эффективно и практически решаются с помощью парадигмы программирования, основанной на этом? Какие проблемы нет?
Представьте, что все программы написаны там, где 80% всей логики связаны с этими операторами. Интересно, может ли язык, который заставил операторов на пользователе использовать их структуру...
Ответы
Ответ 1
Эта статья является одной из длинной серии связанных теоретических исследований. Область исследований - это то, что функциональные программисты называют общим программированием (которое смутно отличается от того, что программисты на С++ называют общим программированием). Идея заключается в том, что вы пишете свои функции таким образом, чтобы , когда вы определяете новый тип данных, вы автоматически получаете новый код для этого. Классической проблемой, которую люди хотели бы решить таким образом, является запись изображения данных на диск и последующее считывание изоморфных данных с образа диска.
Если вы хотите почувствовать практическое применение этих идей, я рекомендую Ralf Hinze отличную статью Generics for the Masses, которая показывает, как вы можете попробовать все эти дурацкие идеи в простой старой Haskell. Например, я использовал эти методы для реализации замещения, избегающей замещения для очень сложных промежуточных языков внутри компиляторов.
Ральф написал ряд хороших статей по родовому программированию, как и Джереми Гиббонс. Их материал не так далеко, как бананы, линзы и т.д.
Ответ 2
Это означает, что решения, которые могут быть смоделированы в одной парадигме, также могут быть смоделированы в другом, и что их можно программно преобразовать в другое.
Теперь некоторые проблемы легче решить в одной парадигме, чем в другой. Кроме того, легче доказать свойства в одной парадигме, чем в другой. Поэтому, если вы можете показать такую эквивалентность, вы открываете дверь для решения определенных проблем в более простой ситуации, а затем преобразовываете решение в желаемую парадигму.
Это похоже на monads thingy. Большое дело в монадах - это не то, как вы пишете. Большое дело в них состоит в том, что существует множество теорем о монадах, которые могут быть применены после того, как вы уменьшите свою проблему до монады. Здесь применяется тот же принцип.