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

Haskell *

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

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

Haskell в настоящем проекте

Время на прочтение5 мин
Количество просмотров11K
Мне приходилось участвовать в проектах на c++ с количеством строк более 600 000. Поэтому сложно назвать проект на 5000 строк настоящим. И тем не менее, для хаскеля и мотивации just for fun это немалый объём.

Эта небольшая программа[1] пишется в свободное время, поэтому времени ей сильно не хватает.

Хотелось бы описать некоторые впечатления об использовании хаскеля на практике.
Читать дальше →
Всего голосов 55: ↑45 и ↓10+35
Комментарии52

Изучай Хаскель ради добра! Аппликативные функторы

Время на прочтение37 мин
Количество просмотров10K
Совсем недавно издательство No Starch Press подготовило и выпустило печатное издание замечательного учебника Learn You a Haskell for Great Good! (онлайн-версия), написанного Miran Lipovača.

Я хочу представить вам самый актуальный перевод главы 11 Аппликативные функторы, оригиналом для которого послужило именно издание от No Starch Press, адаптированное для печати.
Читать дальше →
Всего голосов 55: ↑48 и ↓7+41
Комментарии10

Haskell Quest Tutorial — Зал

Время на прочтение13 мин
Количество просмотров3.3K
Скорее всего, это последняя часть, опубликованная точно в срок. Мой отпуск почти закончился, и теперь писать по статье в неделю будет очень сложно. Спасибо всем, кому было интересно руководство «Haskell Quest Tutorial»!

Living Room
You are in the living room. There is a doorway to the east, a wooden door with strange gothic lettering to the west, which appears to be nailed shut, a trophy case, and a large oriental rug in the center of the room.
Above the trophy case hangs an elvish sword of great antiquity.
A battery-powered brass lantern is on the trophy case.


Содержание:
Приветствие
Часть 1 — Преддверие
Часть 2 — Лес
Часть 3 — Поляна
Часть 4 — Вид каньона
Часть 5 — Зал

Часть 5,
в которой мы из маленькой ошибки выведем значительные следствия, а затем добавим в игру объекты.

Doors in, doors out...
Всего голосов 4: ↑4 и ↓0+4
Комментарии0

Haskell Quest Tutorial — Вид каньона

Время на прочтение12 мин
Количество просмотров3.1K
Canyon View
You are at the top of Great Canyon on its west wall. From here there is a marvelous view of the canyon and parts of the Frigid River upstream. Across the canyon, the walls of the White Cliffs join the mighty ramparts of the Flathead Mountains to the east. Following the Canyon upstream to the north, Aragain Falls may be seen, complete with rainbow. The mighty Frigid River flows out from a great dark cavern. To the west and south can be seen an immense forest, stretching for miles around. A path leads northwest. It is possible to climb down into the canyon here.


Содержание:
Приветствие
Часть 1 — Преддверие
Часть 2 — Лес
Часть 3 — Поляна
Часть 4 — Вид каньона
Часть 5 — Зал

Часть 4,
в которой мы займёмся рефакторингом, реализуем пару действий, узнаем о pattern matching и рекурсии, а так же сделаем из квеста настоящую программу.
...running stream of water...
Всего голосов 24: ↑21 и ↓3+18
Комментарии7

Истории

Haskell Quest Tutorial — Поляна

Время на прочтение11 мин
Количество просмотров2.6K
Clearing
You are in a small clearing in a well marked forest path that extends to the east and west.


Содержание:
Приветствие
Часть 1 — Преддверие
Часть 2 — Лес
Часть 3 — Поляна
Часть 4 — Вид каньона
Часть 5 — Зал

Часть 3,
в которой мы станем учиться волшебству с АТД и познаем магические преобразователи Show и Read.

В прошлой части мы изобретали различные варианты describeLocation, а в конце создали три алгебраических типа — Location, Direction, Action. Я обмолвился про волшебство и удивительные возможности АТД, но сказал, что мы рассмотрим их позже. Мы только унаследовали наши типы от класса типов Eq, в котором лежат операции "==" и "/=", а теперь…
...we need to go deeper.
Всего голосов 8: ↑7 и ↓1+6
Комментарии2

Решение загадки Эйнштейна на Haskell

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

Прелюдия

Albert_Einstein
Не так давно я прочитал на Хабре статью, которая напомнила мне про интересную головоломку, которую называют «Загадкой Эйнштейна» или «Zebra puzzle». Вероятно многие из вас решали эту задачку на листке бумаги и гордились тем, что входят в несколько процентов населения земли, способных на это.

Прочитав статью, я задумался над программным решением этой задачи. Подход, приведенный в статье был интересен и вполне оправдал название блога, но показался мне не совсем понятным. В данный момент я интересуюсь языком программирования Haskell, который прекрасно подходит и сам по себе для разминки мозгов, решение же головоломки на нем показалось мне прекрасным вызовом.
Читать дальше →
Всего голосов 47: ↑44 и ↓3+41
Комментарии39

Haskell Quest Tutorial — Лес

Время на прочтение12 мин
Количество просмотров5.3K
Forest
This is a forest, with trees in all directions. To the east, there appears to be sunlight.
You hear in the distance the chirping of song bird.


Содержание:
Приветствие
Часть 1 — Преддверие
Часть 2 — Лес
Часть 3 — Поляна
Часть 4 — Вид каньона
Часть 5 — Зал

Часть 2,
в которой мы будем мучить функцию describeLocation, и даже узнаем, что такое АТД.

Настало время получше подумать над игрой. Что это будет? Классическая приключенческая игра, где можно куда-то идти, находить и использовать предметы, взаимодействовать с неигровыми персонажами? Или это будет rogue-like текстовая игра с магией, злыми существами, с кучей оружия, брони, свитков, мечей и луков? Или, быть может, мы хотим создать квесты а-ля «Космические рейнджеры-2»? Ну, по части игровой механики мы пойдем по стопам Zork, а историю выберем другую — замечательный НФ-квест Lighthouse. Просто потому, что он мне нравится.
Просвет между деревьями...
Всего голосов 6: ↑5 и ↓1+4
Комментарии2

Графика через OpenGL на Haskell

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

Бытует мнение, что Хаскелл — это язык для нердов-математиков. Конечно, это все стереотипы, но туториалов по нему действительно мало, что несколько препятствует изучению. Особенно мало таких, где пишутся реальные приложения (тут выделяется замечательный Real World Haskell, который, впрочем, несколько сумбурен). Поэтому возникла идея написать этот туториал, об одной из наименее освещенных областей в Хаскелле — выводе графики. Постараюсь сделать его подробным, но предполагается, что читатель знаком с основами Хаскелла, особенно с понятием монад. Если нет — рекомендую почитать этот топик, а также книги, которые советует Skiminok в комментариях к нему.
Дисклеймер: работа будет вестись с экспериментальной библиотекой. Так что не удивляйтесь всяким извратам, для того, чтобы все работало.

Shall we?
Читать дальше →
Всего голосов 27: ↑25 и ↓2+23
Комментарии20

Haskell Quest Tutorial — Преддверие

Время на прочтение11 мин
Количество просмотров10K
West of House
You are standing in an open field west of a white house, with a boarded front door.
There is a small mailbox here.

> open mailbox
Opening the small mailbox reveals a leaflet.

> read leaflet
(Taken)
«WELCOME TO ZORK!

ZORK is a game of adventure, danger, and low cunning. In it you will explore some of the most amazing territory ever by mortals. No computer should be without one!»


Содержание:
Приветствие
Часть 1 — Преддверие
Часть 2 — Лес
Часть 3 — Поляна
Часть 4 — Вид каньона
Часть 5 — Зал

Часть 1,
в которой мы познакомимся с не всеми основами языка Haskell и напишем одну полезную для квеста функцию.

Итак, вы стоите в самом начале, перед закрытой дверью и видите почтовый ящик.
Open... Read...
Всего голосов 32: ↑29 и ↓3+26
Комментарии11

Haskell Quest Tutorial — Приветствие

Время на прочтение4 мин
Количество просмотров11K
Добрый день, любители приключений!

Вы, конечно, играли в текстовую приключенческую игру Zork. Вы еще помните эти недели, когда вы искали вход в подземелье, или думали, как пройти мимо гоблинов с дубинками. Вы помните, как махали мечом, вы даже испробовали различные варианты «hit self» и «kill self». Программа понимала ваши команды, — результат был предсказуем… Весело и удивительно было изучать текстовый мир Zork! И вам, конечно, хотелось создать что-то подобное своими руками. Так может, попробуем? Вместе? В этом руководстве вы будете шаг за шагом создавать свою текстовую игру на замечательном языке Haskell.

Я постараюсь объяснять все используемые концепции так детально, как будто рассказываю это тем, кто ничего не знает о Haskell, — или даже о программировании. Это, быть может, не всегда получится, поскольку руководство пишется параллельно с кодом, для изучения языка. Я готов ответить на все ваши вопросы, если смогу. Искушенные хаскеллисты могут посчитать ответы, объяснения и программный код где-то корявыми или не полностью верными. Это ничего: чем дальше в лес, — тем злее волки тем богаче флора и фауна. У нас есть кусок глины, — и скоро он станет чем-нибудь оформленным, вазой, например. Я не могу заранее сказать, сколько будет статей, как они будут выглядеть, и к чему мы придем. «Знать путь и пройти его — не одно и то же».
Читать дальше →
Всего голосов 24: ↑21 и ↓3+18
Комментарии14

IO работает с кучей Хаскеля

Время на прочтение2 мин
Количество просмотров1.2K
Начало серии Куча Хаскеля
В этой статье мы сосредоточимся на вас. Вы всё крутитесь около кучи Хаскеля и норовите открыть подарок. В конце концов, подарки сами по себе не открываются.
Читать дальше →
Всего голосов 32: ↑25 и ↓7+18
Комментарии3

Вычисление в куче Хаскеля

Время на прочтение1 мин
Количество просмотров1.4K
Начало серии Куча Хаскеля

Дух новогодних подарков

Сегодня в статье мы кратко рассмотрим, что происходит, когда вы в куче Хаскеля открываете подарок с духом внутри. Почти во всём, что есть в куче, кроме констант и того, что уже вычислено, сидит дух. Весь вопрос в том, что станет делать дух в подарке.
Читать дальше →
Всего голосов 36: ↑29 и ↓7+22
Комментарии13

Куча Хаскеля

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

Куча Хаскеля — довольно странное место. Она не похожа на кучу в традиционном языке со строгими вычислениями...

… которая представляет из себя кучу мусора из старых добрых простых данных!
Читать дальше →
Всего голосов 62: ↑54 и ↓8+46
Комментарии34

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

Haskell без монад

Время на прочтение10 мин
Количество просмотров7.1K
Любой программист, изучающий haskell, рано или поздно встречается с таким непостижимым понятием как монада. Для многих знакомство с языком заканчивается монадами. Существует множество руководств по монадам, и постоянно появляются новые (1). Те немногие, кто понимает монады, тщательно скрывают свои знания, объясняя монады в терминах эндофункторов и естественных преобразований (2). Ни один опытный программист не может найти монадам место в своей устоявшейся картине мира.

В результате java-программисты только посмеиваются над хаскелем, не отрываясь от своего миллионострочного энтерпрайзного проекта. Разработчики на С++ патчат свои сверх-быстрые приложения и придумывают ещё более умные указатели. Веб-разработчики листают примеры и огромные спецификации по css, xml и javascript. А те из них, кто в свободное время изучает haskell, сталкивается с труднопреодолимым препятствием, имя которому монады.

Итак, узнаем как программировать на хаскеле без монад.
Читать дальше →
Всего голосов 66: ↑59 и ↓7+52
Комментарии26

Пример асинхронной монады

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

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

Как бы в коде на вашем предпочитаемом языке выглядел, например, такой диалог, с учётом того, что в любой момент (между любыми из этих пунктов) могут прийти какие-то другие запросы, которые тоже надо обработать, но не впутать случайно в этот диалог:
1. Посылаем число
2. Приходит число в ответ
3. Посылаем число из п.2 в квадрате
4. В ответ опять число
5. Выводим на консоль сумму чисел п.2 и п.4

Вот как это будет выглядеть на Haskell (функция example, разумеется, неблокирующая):
example :: Int -> AIO ()<br>
example v = do<br>
    x <- request v<br>
    y <- request (* x)<br>
    io $ print (+ y)<br>

Сравните это с блокирующей похожей функцией, которая, к примеру, запрашивает ответ у пользователя:
example :: Int -> IO ()<br>
example v = do<br>
    x <- request v<br>
    y <- request (* x)<br>
    print (+ y)<br>

Расковырять монаду!
Всего голосов 42: ↑38 и ↓4+34
Комментарии8

Haskell Tutorial с другой стороны

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

Я отношу себя к категории ленивых фотолюбителей. У меня есть неплохая «беззеркальная зеркалка», иногда на меня нападает желание пощёлкать чего-нибудь вокруг себя. Однако я ленив, и ковыряться потом в полученном фотоархиве у меня ни времени, ни желания нет. Как правило фотографии просматриваются один-два раза сразу после съемки путём подключения фотоаппарата к телевизору через HDMI кабель. Затем фотографии отправляются в небытие каталог ~/Pictures/Photos/Unsorted и, как правило, остаются там навсегда. С различным спец. ПО я как-то не сдружился, посему этот бардак просуществовал почти два года. И вот, на волне изучения Haskell, я созрел для решения проблемы.
Читать дальше →
Всего голосов 46: ↑42 и ↓4+38
Комментарии27

И да придет Haskell…

Время на прочтение3 мин
Количество просмотров2.5K
Странно, что это пришло мне в голову — я просто смотрел на Common Lisp и объяснение принципов его работы, ну еще немного на инструментарий Haskell.

И да придет Haskell…

Haskell — она как «та девчонка», ну вы знаете…
Читать дальше →
Всего голосов 153: ↑99 и ↓54+45
Комментарии51

Пытаемся сделать PDF-книгу из веб-комикса при помощи Haskell на примере xkcd

Время на прочтение7 мин
Количество просмотров2.2K
Прочитав статью решил проверить, насколько пригоден для этого Haskell. Сразу скажу, сам Haskell пригоден весьма неплохо, но вот, пробежавшись по hackage.haskell.org, я сразу обнаружил проблемы с библиотеками для работы с PDF, что и поставило крест на полноценной реализации.
Но я решил всё же проделать часть работы, дабы показать, как та же задача могла бы быть сделана на Haskell, если бы да кабы…
Читать дальше →
Всего голосов 36: ↑32 и ↓4+28
Комментарии17

Реализация целочисленной арифметики на Haskell

Время на прочтение4 мин
Количество просмотров3.5K
Долгое время считалось, что натуральные числа, как и числа в целом, являются неопределяемыми понятиями, первичными; их можно познать только интуицией. Однако в настоящее время всем числовым множествам было дано четкое определение.

Наиболее удобным способом является определение по Пеано. Однако оно определяет счетные множества, но не даёт определенного сконструированного множества. Другой подход — определить натуральное число как специальное кардинальное, а именно мощность конечного множества. Третий — нумералы Чёрча.
Читать дальше →
Всего голосов 7: ↑6 и ↓1+5
Комментарии5

WebSocket сервер на Haskell

Время на прочтение6 мин
Количество просмотров4.1K
Как-то раз от нечего делать я решил написать WebSocket сервер, а написав, подумал, что кому-то может оказаться интересным, чем же тут может помочь ленивость, функциональная чистота и прочие лямбды.
Читать дальше →
Всего голосов 47: ↑45 и ↓2+43
Комментарии21

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