Путешествия мурзилки.

May 14, 2012 21:09

Ранее, вскользь, упоминал о том что взялся за haskell. Приятный язык, очень.
На данный момент чувства целостности и полноты восприятия "всегомонадного" нет. Дело опыта.

Простенькая задачка - нужно разобрать файл с следующим форматом данных, описанном в псевдо бнф нотации:

-- data ::= usefulData data | invalidData data
-- usefulData ::= keyAndId value
-- ( Read more... )

штрихи-штрихи, fp, parsec, haskell

Leave a comment

udpn May 14 2012, 17:38:16 UTC
>> На данный момент чувства целостности и полноты восприятия "всегомонадного" нет.

А там нет целостности и полноты почти нигде. Для этого нужно взять хардкорную версию, например, Agda. Полагаю, ты уже заметил, что Haskell несколько неблагосклонен к логическиим ошибкам? Agda неблагосклонна на порядок сильнее. Если писать правильно, то компиляция программы на этом языке эквивалентна её корректности.

По поводу кода:
1) лучше после do делать перевод строки, так выглядит красивее
2) в этой задаче, кажется, не нужны монады и do-нотация. оно должно решаться и с помощью более простых аппликативов. См. по ссылке главу "Applicative parsing by example".

Reply

udpn May 14 2012, 17:44:03 UTC
Ну и да, на Parsec дело не останавливается. Либа довольно популярная, но старая. Тот же boost::spirit в С++ позволяет как парсить, так и сериализовать (Qi и Karma соотв-но). Почти из одинакового синтаксиса. Есть более свежие наработки: http://nponeccop.livejournal.com/263285.html .

Reply

sassa_nf May 14 2012, 19:32:22 UTC
Что-то не видно, чем апликативы принципиально лучше в этой задаче. Или дело просто в синтаксисе?

Reply

udpn May 15 2012, 06:38:59 UTC
Да, в синтаксисе. Он более lightweight, и reasoning в аппликативах намного легче (сравни аксиомы, например).

Reply

dvig_al May 15 2012, 08:48:15 UTC
Поподробнее пожалуйста. Легкий смысле восприятия/понятности? И что о аксиомах (наверно говоришь о applicative laws)?

Reply

udpn May 15 2012, 09:09:02 UTC
Да. Да.

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

Reply

dvig_al May 15 2012, 08:41:23 UTC
О Agda. Думается, за ее освоение возмусь нескоро. Требуется соответсвующий бэкграунд. На следующую пару месяцев материала для прочтения и, что важнее - практики достаточно. Посему трогать Agda не буду. Предыдущее знакомство было на уровне хэллэу уолд.

1. О том делать ли перевод строки в do нотации или нет - для себя однозначно не определил. Пересмотрев некоторое количество haskell пакетов, обратил внимание на отсутствие перевода строки у большинства.
2. Файлы приходят по сети, уже IO. После стадии разбора, данные передаются на следующий уровень, предварительно лифтятся в монаду, в общем конвеер.
Интереса ради следующий кусок парсера попробую написать с использованием applicative.

Reply

udpn May 15 2012, 09:18:15 UTC
Как-то после двух лет (довольно ленивого) ковыряния Хаскелла в этой Agda чувствую себя совсем неуютно. Это же я не рекомендую прямо сейчас пойти на ней писать, нет. Просто если хочется чего-то до слёз красивого, то это в ту степь.

Reply


Leave a comment

Up