Ранее, вскользь, упоминал о том что взялся за haskell. Приятный язык, очень.
На данный момент чувства целостности и полноты восприятия "всегомонадного" нет. Дело опыта.
Простенькая задачка - нужно разобрать файл с следующим форматом данных, описанном в псевдо бнф нотации:
-- data ::= usefulData data | invalidData data
-- usefulData ::= keyAndId value
--
(
Read more... )
А там нет целостности и полноты почти нигде. Для этого нужно взять хардкорную версию, например, Agda. Полагаю, ты уже заметил, что Haskell несколько неблагосклонен к логическиим ошибкам? Agda неблагосклонна на порядок сильнее. Если писать правильно, то компиляция программы на этом языке эквивалентна её корректности.
По поводу кода:
1) лучше после do делать перевод строки, так выглядит красивее
2) в этой задаче, кажется, не нужны монады и do-нотация. оно должно решаться и с помощью более простых аппликативов. См. по ссылке главу "Applicative parsing by example".
Reply
Reply
Reply
Reply
Reply
Аппликативы просто представляют собой контексты, в которых подменён смысл применения функции к аргументу. Монады намного, намного сложнее.
Reply
1. О том делать ли перевод строки в do нотации или нет - для себя однозначно не определил. Пересмотрев некоторое количество haskell пакетов, обратил внимание на отсутствие перевода строки у большинства.
2. Файлы приходят по сети, уже IO. После стадии разбора, данные передаются на следующий уровень, предварительно лифтятся в монаду, в общем конвеер.
Интереса ради следующий кусок парсера попробую написать с использованием applicative.
Reply
Reply
Leave a comment