Как стать автором
Обновить
13.9

Haskell *

Чистый функциональный язык программирования

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

Restricted IO в Haskell

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров1.3K

В статье описывается механизм создания собственного модифицированного варианта монады IO в Haskell, с ограничениями операций ввода-вывода.

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

Чтобы добавить в программу интерактивность, но при этом максимально сохранить математическую целостность функций, применяется примерно такой подход:

Читать далее
Всего голосов 12: ↑11 и ↓1+16
Комментарии4

Новости

Разбор монады ContT, или как написать продвинутый goto, генераторы и файберы на хаскеле

Уровень сложностиСложный
Время на прочтение7 мин
Количество просмотров1.3K

В этой статье я разберу монаду ContT, и покажу как вернуть return и другие control-flow операторы из императивных языков программирования, которых мне так нехватало, когда я начинал изучать хаскель.

Читать далее
Всего голосов 11: ↑10 и ↓1+10
Комментарии2

Безопасный Continuous Deployment БД по принципам DB-First

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров3.3K

В статье рассматривается Continuous Deployment для БД с бесшовными релизами за счёт обратно-совместимых обновлений и автоматизации проверок совместимости с помощью подхода DB-First.

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии8

Постфиксный калькулятор на Haskell

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров1.7K

Можно ли внедрить в Haskell постфиксный калькулятор?

begin push 1 push 2 add end
begin push 1 push 2 push 3 add mul end

На первый взгляд такой код на Haskell не может работать. Функция begin должна иметь произвольное количество аргументов, а Haskell является языком со статической типизацией. Но на самом деле, для написания вариативных (polyvariadic) функций достаточно полиморфизма.

Читать далее
Всего голосов 11: ↑11 и ↓0+14
Комментарии0

Истории

Как изучить Haskell всего за 15 лет

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров14K

Haskell — это язык программирования, изобретённый в 20-м веке шотландскими логиками в качестве пранка (вероятно). Примерно пятнадцать лет назад я начал изучать Haskell по причинам, которые уже и не упомню. Сегодня я наконец написал полезную программу на Haskell и уверен, что смогу сделать это снова, если мне когда-нибудь понадобится ещё одна компьютерная программа.

Я не знаю, как изучал функциональное программирование в целом и Haskell в частности. В 2006-м я следил за проектами why the lucky stiff и читал передовой тамблелог Леа Нойкирхен Anarchaia, и какой-то из этих источников познакомил меня с миром за пределами ООП. В декабре 2006 года Леа опубликовала на Anarchaia ссылку на Pandoc, и тогда я впервые узнал о своём любимом ПО и языке, на котором оно было написано.
Читать дальше →
Всего голосов 44: ↑39 и ↓5+53
Комментарии9

Из пушек по воробьям. Генерация и решение лабиринта не самым обычным способом

Уровень сложностиСредний
Время на прочтение19 мин
Количество просмотров4.8K

На уходящей неделе мне попалась симпатичная, хоть и не новая мини‑серия статей на Дзен‑канале @zdgzdgzdg про процедурную генерацию лабиринта методом «коллапса волновой функции». Пока я читал эти статьи и знакомился с кодом, меня осенило: ведь это же вычисления в комонаде, погружённые в монаду! Я не издеваюсь, действительно, речь идёт о композиции двух паттернов функционального программирования: комонады Zipper, превращающей локальные правила в глобальное состояние, и монады Random, позволяющей генерировать случайные объекты.

И вот, в качестве баловства на выходных, я решил реализовать этот «квантовый» алгоритм генерации лабиринтов на Haskell, используя и комонады и монады, и вообще, ни в чëм себе не отказывая. И хотя язык программирования Haskell нужен не только для извращений, но именно для них он подходит идеально!

Читать далее
Всего голосов 38: ↑38 и ↓0+38
Комментарии7

О функциональном программировании на примере решения судоку

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров7.6K

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

Читать
Всего голосов 13: ↑12 и ↓1+19
Комментарии26

Проектирование БД рекомендательной системы по подходу DB-first

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров3.9K

В данной статье мы рассмотрим проектирование системы по подходу DB-first и то, какие проблемы он помогает не просто решить, а устранить как явление.

Читать далее
Всего голосов 9: ↑7 и ↓2+7
Комментарии10

Что вы знаете о символьном программировании?

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров17K

Кликбейтный заголовок, риторический вопрос и обещание раскрыть тайну! Не самый лучший набор, но нормального названия для статьи мне в голову не пришло. Что же здесь все таки будет? Речь пойдет о реализации символьного программирования в Wolfram Language (WL). Я не буду рассказывать про отличия от других парадигм. А также здесь точно не будет общих определений. Вместо этого я попытаюсь ответить на несколько вопросов исходя из своего личного опыта и наблюдений.

Внимание! Я не математик и не знаю haskell и lisp! И буду рад если меня поправят настоящие математики, которые с ними знакомы.

Читать далее
Всего голосов 40: ↑40 и ↓0+40
Комментарии98

Делаем crackme. Часть первая: whitebox AES

Уровень сложностиСредний
Время на прочтение34 мин
Количество просмотров3.1K

Эта статья первая из цикла, в котором мы будем создавать crackme для linux amd64. В crackme будут реализованы шифрование каждой функции отдельным ключём и наномиты для противодействия отладке. В данной статье мы рассмотрим алгоритм встраивания ключа шифрования в код для усложнения расшифровки функций пользователем. Если стало интересно, прошу под кат.

Читать далее
Всего голосов 8: ↑8 и ↓0+8
Комментарии0

Автоматизация разработки с помощью подхода DB-first

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров5K

Интеграция с БД - привычно сложная и хрупкая часть большинства кодобаз, постоянно отвлекающая внимание разработчиков и раздувающая сроки. Какой бы хайпующий фреймворк вы ни пробовали, вы неизбежно обнаруживаете себя борющимся с одними и теми же симптомами, но ощущение того, что проблема могла бы решаться проще не покидает вас. Знакомо?

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

Читать далее
Всего голосов 20: ↑5 и ↓15-9
Комментарии14

Ломаем хаскелем Brainfuck

Уровень сложностиСложный
Время на прочтение28 мин
Количество просмотров10K

Немного о bfc


Brainfuck — очень глупый язык. Там есть лента из 30к ячеек, по байту каждая. Команды bfc это:


  • Передвижение по ленте влево и вправо (символы < и >)
  • Увеличение и уменьшение значения в ячейке (символы + и -)
  • Ввод и вывод текущей ячейки (символы . и ,)
  • И цикл while, который продолжается пока значение в текущей ячейке не ноль. [ и ] это начало и конец цикла соответственно

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

Читать дальше →
Всего голосов 84: ↑84 и ↓0+84
Комментарии17

Нет, в Haskell неудобно обрабатывать ошибки (если не пользоваться эффектами)

Время на прочтение6 мин
Количество просмотров5.7K

Если вы когда-нибудь читали агитации, призывающие к изучению Haskell, наверняка вас убеждали, что в нём ну очень удобно обрабатывать ошибки, ведь там есть Монада Either.

Но это неправда. В хаскельных школах не рассказывают, как удобно(?) обрабатывать ошибки. А я расскажу.

Обработать ошибки без регистрации и СМС
Всего голосов 29: ↑28 и ↓1+37
Комментарии19

Ближайшие события

One day offer от ВСК
Дата16 – 17 мая
Время09:00 – 18:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область

Как выглядит стажировка в ИТМО

Время на прочтение8 мин
Количество просмотров2.1K

Обсуждая IT-образование, представители компаний часто жалуются на отсутствие у вчерашних студентов навыков работы в команде и понимания, как в принципе функционирует бизнес в этой сфере. Но мы уверены ― многое зависит  как от самого студента, так и среды, в которой он проводит время, учится. На некоторых факультетах ИТМО стажировка в магистратуре обязательна. После нее на рынок труда выходит готовый джун или мидл, зачастую с предложением о работе в той самой компании, где он стажировался. 

В этой статье мы покажем, как стажировка проходит на практике и что она приносит самим IT-компаниям. В фокусе истории двух магистрантов института прикладных компьютерных наук ИТМОФедора Золотухина и Андрея Стояна.

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

Пример использования State и StateT

Время на прочтение4 мин
Количество просмотров3K

Мне встречалась фраза: "для многих знакомство с Haskell заканчивается на монадах". Монады действительно сложны для понимания, а самая непонятная, лично для меня, была монада State.

На простом примере, я хочу показать всю полезность монады State и еще большую полезность трансформера StateT.

Читать далее
Всего голосов 12: ↑12 и ↓0+12
Комментарии4

«Если апатия приводит в Python, то конструктивный поиск ведёт к Rust или Go»

Время на прочтение5 мин
Количество просмотров8.3K

«Хтоническая логика Haskell, тяжеловесная мощь «плюсов» и грязная гибкость скриптовых языков наталкивают человека на экзистенциальный поиск. Если апатия приводит в Python, то конструктивный поиск в итоге ведёт к Rust или Go», — считает Игорь Нетай, специалист отдела перспективных исследований компании «Криптонит».

Читать далее
Всего голосов 18: ↑9 и ↓9+1
Комментарии14

Близится выпуск обновления Vasil для Cardano: чего ожидать

Время на прочтение7 мин
Количество просмотров1.4K

Обновление Vasil значительно улучшит производительность и возможности Cardano. За последние пару лет в сети наблюдались некоторые нововведения  – запуск NFT, появление multi-asset и возможностей смарт-контрактов в 2021 году – но Vasil - это самое значительное обновление сети с момента запуска стейкинга в эре Shelley.

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

Cardano в 2022: от недееспособной PAB до форсирования конкурентности

Время на прочтение10 мин
Количество просмотров1.8K

Cardano (ADA) входит в топ-10 криптовалют по рыночной капитализации. Cardano — много больше чем криптовалюта: это масштабируемая и экологически устойчивая блокчейн-платформа для запуска смарт-контрактов, которая работает на основе протокола консенсуса с механизмом Proof of Stake Ouroboros и разрабатывается академическим сообществом экспертов и учёных-программистов на базе исследований, основанных на фактических данных. Цель Cardano — создание полностью децентрализованного блокчейн-проекта, управляемого и финансируемого системой голосования пользователей.

Несмотря на очевидные преимущества, Cardano часто критикуют за медленный прогресс в разработке.  В 2021 году  Cardano запустили несколько обновлений, представив наконец платформу Plutus для написания смарт-контрактов, и анонсировав возможность совместимости со смарт-контрактами на основе Ethereum. Что представляют собой эти обновления, с какими проблемами мы с командой столкнулись, работая на Cardano и что предстоит предпринять, чтобы их решить — расскажу в этом материале.

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

Спящий гигант, или Почему Cardano продолжает и выигрывает

Время на прочтение11 мин
Количество просмотров5.5K

Cardano и Ethereum — блокчейны, у которых схожие возможности и они неизбежно подвергаются сравнению друг с другом. Постепенно расстановка сил меняется, и о  Cardano всё чаще говорят как об «убийце Ethereum». Разбираемся в особенностях технологии Cardano, смотрим, есть ли основания для слухов и рассказываем, почему Cardano может стать мощнее, быстрее и доступнее, чем Ethereum или Bitcoin.

Читать далее
Всего голосов 13: ↑6 и ↓7+1
Комментарии10

Telegram-бот мониторинга состояния серверов на Haskell

Время на прочтение5 мин
Количество просмотров4.7K

Привет, Хабр! Состояние сервера необходимо постоянно мониторить, чтобы в случае ошибки быстро ее исправить. Удобнее всего отслеживать работоспособность с помощью смартфона, а именно Telegram-бота, он позволяет осуществлять проверку на ходу. Реализуем Telegram-бот на функциональном языке Haskell, заодно разберемся в его преимуществах.  

Читать далее
Всего голосов 4: ↑4 и ↓0+4
Комментарии0
1
23 ...

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