Как стать автором
Обновить
12.55
Рейтинг

Функциональное программирование *

От Lisp до Haskell

Сначала показывать
Порог рейтинга

Властелин структур

Программирование *.NET *C# *Математика *Функциональное программирование *

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

Читать далее
Всего голосов 12: ↑12 и ↓0 +12
Просмотры 2.3K
Комментарии 7

Новости

Scala: Гексагональная архитектура и DDD на Free Monad в функциональном программировании

Совершенный код *Проектирование и рефакторинг *Scala *Функциональное программирование *

Привет Хабр! Пятничного тру ФП хардкора с Free Monad, Таглес Финал, Монад трансформерами, Refined Types, Smart Constructors и прочим таким вам в ленту. Хардкор сам себя в ленту не принесет так что погнали.

Гексагональная архитектура делит наш код на три основные части.

1) Primary Adapters,

2) Secondary Adapter

3) Logic aka Domain.

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Просмотры 2.1K
Комментарии 1

Scala: Авторизация. Защита API с помошью Bearer токена

Информационная безопасность *Scala *API *Функциональное программирование *

В это пример я буду рассматривать только парсинг и валидацию токенов что уже пришли в мое API в Authorization хедере. Для генерации токенов, регистрации пользователей и прочего SSO есть много готовых решений которые легко установить или даже устанавливать не надо. Например, Auth0, Keyckloak, IdentityServer4. В пример е буду работать с Tapir который может использовать в качестве бекенда http4s, Akk HTTP, Netty, Finatra, Play, ZIO Http, Armeria. Я буду использовать Tapir + Http4s.

Читать далее
Всего голосов 4: ↑3 и ↓1 +2
Просмотры 1.3K
Комментарии 0

Абстрактная алгебра в действии

Программирование *.NET *C# *Математика *Функциональное программирование *

В последнее время всё чаще я ощущаю математическое веяние в программировании. Нет, это не про интегралы с производными, а про что-то абстрактное, другое. Про то, что было всегда у нас под носом, но оставалось незамеченным. Наступит день - про это будут говорить на каждом углу. Но не сегодня. Сегодня мы с этим познакомимся.

Читать далее
Всего голосов 43: ↑43 и ↓0 +43
Просмотры 14K
Комментарии 28

Nanopass или как я писал компилятор этой осенью

Lisp *Компиляторы *Функциональное программирование *

image


Сразу прошу прощения за несколько надоевший всем стиль «lytdybr», но уж очень хочется поделиться крайне приятным опытом и рассказать о по-своему замечательном компиляторном курсе. И это ещё хорошо, что я пишу сейчас, когда эмоции подугасли, а не когда я только закончил вторую главу курса и от эйфории чувствовал себя как «хомячок, которого капля никотина разрывает на части»! Сразу предупреждаю, наверняка для кого-то эта заметка — «ребёнок познаёт мир», тех прошу сразу закрыть вкладку и не судить строго. Здесь и далее, всегда и всюду, во всех четырёх сферах прошу учитывать, что я не только не создаю компиляторы, но даже и не обучаю этому и не пишу методички! ;-)

Читать дальше →
Всего голосов 29: ↑29 и ↓0 +29
Просмотры 3.5K
Комментарии 25

Обзор языка функционального программирования Koka

Компиляторы *Функциональное программирование *
✏️ Технотекст 2021

Как-то заглянув на GitHub, обнаружил Koka — язык функционального программирования со статической типизацией. Koka разрабатывается с 2012 года Daan Leijen в Microsoft Research, USA. Его исходники выкладываются на GitHub под лицензией Apache 2.0. Как признаются его авторы, он ещё не готов для промышленного применения: у него нет библиотек, менеджера пакетов и полной поддержки в средах разработки. При этом сам язык достаточно стабилен, а компилятор полностью разработан. Отдельными моментами язык напоминает Rust, Haskell и Scala. Сам же по себе он интересен контролем побочных эффектов. Это его основная фишка. Приглашаю познакомиться с Koka и обсудить его свойства.


fun main(): console ()
  println("Hello, World!")

Сначала пробежимся по свойствам языка, а затем рассмотрим один небольшой пример.

Читать дальше →
Всего голосов 16: ↑15 и ↓1 +14
Просмотры 6.1K
Комментарии 27

Функциональный Kotlin. Часть 2. Каррированные функции и где они обитают

Функциональное программирование *Kotlin *

Вторая статья из цикла о функциональном программировании на Kotlin с разбором принципа работы, концепции и способов применения каррирования на практике.

Читать далее
Всего голосов 11: ↑8 и ↓3 +5
Просмотры 4.4K
Комментарии 3

Применения — слева, аргументы — справа

Haskell *Функциональное программирование *

В предыдущей статье (Заберите свои скобки), мы попытались избавиться от скобочек с помощью нового оператора для передачи аргументов. На основе своего опыта пользования оператором, можно конечно подобрать нужный приоритет, но он все равно будет конфликтовать в случаях, которые мы не предусмотрели. Что же делать? У меня есть идея, но она вам может не понравится.

Опять чем-то скобки не угодили?
Всего голосов 15: ↑15 и ↓0 +15
Просмотры 1.9K
Комментарии 3

Знакомство с p-адическими числами. Часть 2, практическая

Haskell *Математика *Функциональное программирование *


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


Мы поговорим об эффективном внутреннем представлении p-адических чисел, о базовых алгоритмах и методах работы с ними, а также о двух классных инструментах в системе типов языка Haskell: о типах-литералах (type literals) и семействах типов (type families).

Читать дальше →
Всего голосов 13: ↑13 и ↓0 +13
Просмотры 1.8K
Комментарии 1

Мой путь к Magmide

Информационная безопасность *Математика *Функциональное программирование *TypeScript *
Из песочницы
Перевод

Как я постепенно пришёл к мысли о том, что нам необходимо создать средство проверки доказательств теорем и вывести формальную проверку в мейнстрим.

Читать далее
Всего голосов 4: ↑3 и ↓1 +2
Просмотры 820
Комментарии 1

Изменяемые переменные через монаду State на Haskell

Haskell *Функциональное программирование *
Из песочницы

В этой статье я покажу как сделать переменные в чистом языке Haskell для начинающих за 30 минут

Совершить "невозможное"
Всего голосов 11: ↑10 и ↓1 +9
Просмотры 1.7K
Комментарии 16

А вы знаете, где используется Haskell?

Блог компании Typeable Программирование *Haskell *Функциональное программирование *

Всем привет! Мы хотим продолжить серию постов на тему “где используются эти ваши странные языки программирования”. В прошлый раз мы рассказали про Лисп, а сегодня продолжим разговор про функциональные языки и обратим внимание на Haskell.  Он является основным языком разработки в Typeable и, конечно, мы не смогли пройти мимо такой темы.

Haskell — чистый функциональный язык программирования общего назначения. Среди его отличительных особенностей можно выделить строгую статическую типизацию, ленивые вычисления, алгебраические типы данных и серьёзную теоретическую основу. Это относительно молодой язык, он появился в 1990 году, но уже оказал значительное влияние на другие языки и на теорию языков программирования в целом.

Недавно у нас был пост про полезные утилиты, написанные на Haskell, но все они нацелены на использование технически подкованными людьми. Сегодня же приведём примеры прикладного использования из различных индустриальных областей.

Читать далее
Всего голосов 39: ↑38 и ↓1 +37
Просмотры 14K
Комментарии 26

React. Странные хуки: каррирование функционального компонента

JavaScript *Программирование *Функциональное программирование *ReactJS *
Из песочницы

Добрый день! Я начинающий фулстек-разработчик, и это моя первая статья.

Сегодня я хочу рассказать, как сделать функциональные компоненты в реакте чуть более функциональными, а именно как сделать каррирование функционального компонента.

Предупреждение: в статье использованы как функциональные, так и классовые компоненты.

Посмотреть рецепт карри!
Всего голосов 10: ↑9 и ↓1 +8
Просмотры 6.1K
Комментарии 34

Язык программирования Ficus для вычислений и не только

C++ *Компиляторы *Функциональное программирование *Искусственный интеллект
Из песочницы

Здравствуйте, уважаемые хабровчане. Меня зовут Вадим Писаревский, я являлся лидером OpenCV (Open Source Computer Vision Library) на протяжении примерно 20 лет, и продолжаю участие в этом замечательном проекте. В этой статье я рад представить вашему вниманию результат другого своего проекта, над которым в фоне работаю уже много лет, а последние пару лет как минимум половину своего рабочего времени.

Читать далее
Всего голосов 67: ↑67 и ↓0 +67
Просмотры 10K
Комментарии 45

Элегантный вопросительный знак

Занимательные задачки Haskell *Математика *Функциональное программирование *

В этой заметке я хочу поделиться элегантным решением одной задачи с сайта-хрестоматии RosettaCode. Речь пойдёт о программе, вычисляющей функцию Минковского — одного из инструментов теории чисел и динамических систем. Несмотря на то, что реализовать эту функцию относительно несложно (её код даже приводится в Википедии), имеет смысл подняться на достаточно высокий уровень абстракции, для того, чтобы увидеть предельно простое решение этой задачи. Ну, и получить удовольствие от красоты математики и языка Haskell.

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

Сначала мы обсудим саму функцию Минковского, потом разглядим в её действии изоморфизм между двумя алгебраическими структурами и уже с этих позиций напишем короткую программу на Haskell, и, конечно, обсудим что нам с этого всего будет.

Читать далее
Всего голосов 24: ↑24 и ↓0 +24
Просмотры 4.6K
Комментарии 15

Тип данных Either как альтернатива выбрасыванию исключений

Блог компании Издательский дом «Питер» Программирование *API *Функциональное программирование *Kotlin *
Перевод

Исключения – это базовый элемент многих языков программирования. Они обычно используются для обработки аномальных или непредусмотренных условий, при устранении которых необходим особый подход, нарушающий нормальный поток задач в приложении. В некоторых языках, например, в C++ или Java, исключения используются повсюду. Но не все языки спроектированы так. В C# или Kotlin нет проверяемых исключений. В других языках, например, Go и Rust, исключений нет вообще.

Думаю, код, выбрасывающий исключение всякий раз, когда произойдет что-то неожиданное, сложен для понимания, и его тяжелее поддерживать. В этой статье я хочу рассказать о типе данных Either как об альтернативном способе обработки условий, приводящих к ошибкам. Примеры в этой статье даны на Kotlin, поскольку, на мой взгляд, за его синтаксисом легко следить. Но сами концепции не уникальны для Kotlin. Их, так или иначе, можно реализовать в любом языке, поддерживающем функциональное программирование.

Читать далее
Всего голосов 21: ↑18 и ↓3 +15
Просмотры 4K
Комментарии 14

Первый truly stateless оптимальный алгоритм модел-чекера и его проверка на Coq

Блог компании Образовательные проекты JetBrains Тестирование IT-систем *Алгоритмы *Функциональное программирование *

Надоели нестабильные баги в многопоточном коде? Попробуй воспользоваться модел-чекерами! Ведь больше не надо бояться неверифицированных модел-чекеров,  работающих либо за экспоненциальное время, либо неоптимально. Все это в прошлом: в Max Planck Institute for Software Systems разработали новый алгоритм под названием TruSt, который решает эти проблемы и, кроме того, верифицирован на Coq.

Меня зовут Владимир Гладштейн. Этим летом я проходил стажировку в MPI-SWS в группе, которая придумала алгоритм нового модел-чекера для поиска багов в многопоточных программах. Этот алгоритм является оптимальным и truly stateless (вследствие чего работает с линейными затратами по памяти). В этом посте я расскажу, как работают модел-чекеры, в каких случаях их можно использовать, и что за алгоритм придумали мои коллеги. А еще как я проверял доказательства его корректности на Coq.

Читать далее
Всего голосов 26: ↑26 и ↓0 +26
Просмотры 2.6K
Комментарии 40

Какой вклад внесло функциональное программирование в современные языки?

Блог компании Typeable Программирование *Функциональное программирование *

Современные языки программирования обладают большим набором разнообразных средств и удобных фишек, что позволяет писать совершенно разный код на одном и том же языке для одной и той же задачи.


Парадигма программирования — это в первую очередь стиль мышления: то, как программист думает о представлении данных и процессе их обработки. Другими словами, парадигма живёт в голове программиста, а не является свойством языка. Разные языки могут в той или иной степени поддерживать определённую парадигму. Если сейчас зайти на Википедию и начать читать про самые популярные ЯП, мы увидим, что многие из них заявлены как "мультипарадигменные": на них можно писать в разных стилях, но какие-то из них использовать будет удобнее.



В своей недавней статье мы рассказывали о практических применениях Лиспа и упомянули, что он сильно повлиял на развитие других языков программирования, но не стали вдаваться в детали. Пришло время более подробно раскрыть эту тему и разобраться, какой вклад функциональное программирование в целом (не только Лисп!) внесло в развитие других языков. Поскольку мы используем Haskell как основной язык разработки, и наша команда разработчиков состоит из ФП-энтузиастов, мы не смогли пройти мимо такой темы.


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

Читать дальше →
Всего голосов 49: ↑48 и ↓1 +47
Просмотры 16K
Комментарии 15

Создаем облако на Elixir

Разработка веб-сайтов *Функциональное программирование *Elixir/Phoenix *Облачные сервисы
Tutorial

Облачные сервисы уже давно стали неотъемлемой частью нашей жизни. На данный момент существует большое количество сервисов от разных компаний. Так давайте разберемся в принципах работы простейшего облачного сервиса, подтянем навыки проектирования систем. Данный проект можно постоянно развивать на протяжении длительного времени, и может стать отличным pet project. Созданное облако может пригодится для управления домашними файлами, достаточно его развернуть в локальной сети и с легкостью получать доступ к файлам с разных устройств.

Прыгайте под кат за подробностями.

*Прыг*
Всего голосов 6: ↑6 и ↓0 +6
Просмотры 3.5K
Комментарии 0

7 полезных инструментов на Haskell

Блог компании Typeable Программирование *Haskell *Функциональное программирование *

Вступление


Haskell это чистый функциональный язык программирования общего назначения со статической типизацией и ленивыми вычислениями. Появился в 1990 году и был назван в честь Хаскелла Карри. На данный момент основной реализацией является компилятор GHC.


Мы в Typeable очень любим этот язык и используем его как основной язык разработки. Хотя Haskell уже достаточно широко используется в индустрии, всё ещё бытует мнение, что это академический язык и применяется исключительно в научных целях. В этой статье я бы хотел рассказать про несколько достаточно популярных инструментов, которые написаны на Haskell и могут оказаться вам полезны.


Читать дальше →
Всего голосов 15: ↑15 и ↓0 +15
Просмотры 6.5K
Комментарии 34

Вклад авторов