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

Haskell *

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

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

Применение обобщённой свёртки для обработки синтаксических деревьев

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

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

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

Пример Haskell GUI с фреймворком Monomer

Время на прочтение9 мин
Количество просмотров4.6K
Haskell уже имеет несколько достаточно полных средств для создания GUI. Но только некоторые из них являются кросплатформенными и часто требуют знания графической библиотеки, которая находится в основании. Особняком здесь стоит графический фреймворк Monomer. Ему присуща высокая степень абстракции над графикой и при этом, относительная легкость в использования (pure Haskell подход). Имеет хорошую документацию и примеры.
Читать дальше →
Всего голосов 23: ↑23 и ↓0+23
Комментарии2

Еще один вьювер сообщений (логов) для Dwarf Fortress

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

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

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

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

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

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

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

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

Истории

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

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


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


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

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

Работа с файлами формата ELF из Хаскела

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

Работа с файлами формата ELF -- популярная тема на Хабре. ("Введение в ELF-файлы в Linux: понимание и анализ", "Минимизация файла ELF – попробуем в 2021?" и т. д.)

Существуют библиотеки для Хаскела для работы с этими файлами: elf
(Hackage) и data-elf (Hackage). Эти библиотеки работают только с заголовками и элементами таблиц и не дают возможности сгенерировать объектный файл.

Библиотека melf (GitHub, Hackage) даёт возможность полностью разобрать файл ELF и сгенерировать такой файл по несложной структуре данных. Ниже даются примеры её использования.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вступление


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


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


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

Написание компилятора на Haskell + LLVM

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

На работе я пишу почти исключительно на Python, с университетской скамьи остались некоторые знания C/C++, в одном pet-project использовал Haskell. С таким багажом знаний я взялся за написание компилятора на основе LLVM - зачем и что получилось я уже рассказывал в предыдущей статье.

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

Я кратко расскажу про необходимый минимум знаний Haskell, про свои ошибки и к каким решениям я пришел - а так же про решения, к которым я не пришел, и про которые узнал позже - и как их можно интегрировать в ваш pet-компилятор. На все это я по возможности дам ссылки на изучение.

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

Higher-Kinded Data, или ещё один способ работать с сущностями базы данных (и не только)

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

image


Важный дисклеймер


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


Я не стараюсь вам продать этот cпособ как панацею.
Я лишь хочу рассказать вам ещё один способ представлять данные и показать, как его можно использовать, на конкретном примере.
Как и все остальные подходы, этот имеет свои недостатки. И кое-где придётся приседать. С этими приседаниями мы встретимся довольно скоро.


«Не думайте, что я сейчас буду развивать эту концепцию, а затем разочаруюсь в ней. Такой драматургии не будет. Я изначально уже в ней разочарован.»
Роман Михайлов

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


Что такое HKD


Конечно, прежде, чем писать этот раздел, я полез в интернет, чтобы посмотреть, как этот термин определяют другие люди. Чёткого определения я не нашёл.
Грубо говоря, HKD — это то, что предоставляет возможность держать в одном типе данных сразу несколько представлений. Давайте посмотрим на примеры.

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

Property-based тестирование с QuickCheck

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

Автор статьи: klntsky



Что такое Property-Based Testing?


Property-based testing (PBT) — подход к тестированию ПО, подразумевающий автоматическую проверку свойств функций (предикатов), специфицируемых программистом-тестировщиком. Для проверки, т.е. поиска контрпримеров, используются автоматически сгенерированные входные данные. PBT позвляет разработчикам значительно увеличить тестовое покрытие и эффективно расходовать своё время, не придумывая входные данные для тестов самостоятельно. В общем случае данные, генерируемые во время property-based тестирования, ничем не ограничены, поэтому проверка может быть произведена на тех значениях, про которые разработчик мог забыть или для которых не счёл нужным написать юнит-тесты (действительно, не перебирать же все значения входных параметров вручную).


PBT-подход был популяризован библиотекой QuickCheck, написанной на Haskell, и в этой статье будет показано, как пользоваться этим инструментом эффективно.

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

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

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн

Создаем веб-приложение на Haskell с использованием Reflex. Часть 4

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

Часть 1


Часть 2


Часть 3


Всем привет! В новой части мы рассмотрим использование JSFFI.


intro

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

Заберите свои скобки

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

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

Тоже не люблю лишние скобки!
Всего голосов 20: ↑18 и ↓2+16
Комментарии7

Haskell – хороший выбор с точки зрения безопасности ПО?

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


Команда Typeable понимает ценность безопасности. Мы любим Haskell, но стоит ли его выбирать, если ваша цель – создание защищенного программного обеспечения? Хотелось бы сказать «да», но как и для большинства эмпирических вопросов о разработке ПО, здесь просто нет объективного доказательства, подтверждающего, что Haskell – или ещё какой-нибудь язык программирования – обеспечивает большую безопасность, чем любой другой. Нельзя сказать, что выбор языка в Typeable не имеет значения для безопасности, но какое именно значение он имеет, еще нужно подумать.


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

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

Создаем веб-приложение на Haskell с использованием Reflex. Часть 3

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

Часть 1.


Часть 2.


Всем привет! В этой части мы рассмотрим использование класса EventWriter и библиотеки ghcjs-dom.


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

Как мы выбираем языки программирования в Typeable

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

Неоднократно меня спрашивали, почему я предпочитаю использовать такие языки программирования как Haskell и Rust, т.к. они не являются самыми широко используемыми и популярными инструментами. Этот пост написан с целью демистифицировать то, что происходит у меня в голове, когда я думаю о выборе технологии.
Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Комментарии12

Змейка на Haskell с циклом Гамильтона

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

После прохождения курса по Haskell решил закрепить знания первым проектом. Писать будем змейку для терминала. Чтобы придать игре уникальности, добавим бота, который сам будет проходить игру.

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

Создаем веб-приложение на Haskell с использованием Reflex. Часть 2

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

Часть 1.


Часть 3.


Всем привет! Продолжаем серию туториалов по разработке веб-приложения на Reflex.
В этой части мы добавим возможность выполнять различные манипуляции со списком задач.


intro

Читать дальше →
Всего голосов 9: ↑9 и ↓0+9
Комментарии2
Изменить настройки темы

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