Направленный граф в Haskell

Я сейчас борюсь с Haskell. Даже у меня есть некоторый опыт работы с императивными языками, с ООП, но Haskell, кажется, отличается от них. Я недооценил Haskell и думаю, что изучение нового языка для меня не проблема. Однако, проведя целую неделю со многими новыми концепциями (типовые классы, функторы, аппликативы, моноиды, монады... прочитав все 14 глав из этого Learnyouahaskell), я заметил, что они меня так смущают, что я не знаю, как начать писать программу на Haskell. Некоторые эксперты говорят, что для освоения Haskell требуется несколько месяцев. Но у меня всего две недели, чтобы закончить большой проект.

1) Итак, мой первый вопрос: как выучить Haskell

2) Когда мне нужно использовать аппликативные функторы, и когда мне нужно использовать монады?

3) Мой проект должен обрабатывать ориентированный граф на основе многих презентаций:

  • матрица смежности
  • бинарное дерево поиска

Я новичок в Haskell, поэтому не знаю, с чего начать работу с ориентированным графом в Haskell? Есть ли у вас предложения?


person chipbk10    schedule 20.11.2012    source источник
comment
Я предлагаю вам удалить свое вступление и придерживаться третьего вопроса, который является более конкретным.   -  person gawi    schedule 20.11.2012
comment
Поскольку Haskell функционален, вам придется надеть свою рекурсивную шляпу. Насколько хорошо вы понимаете рекурсию и списки?   -  person beatgammit    schedule 20.11.2012
comment
Про рекурсию и списки я понимаю достаточно хорошо. Я имею в виду, что я сделал почти примеры в 14 главах учебника. Но для меня, чтобы начать с большого проекта, я все еще не понимаю, как и когда применять функторы, аппликативные функторы, монады, ... @gawi: Я согласен, что лучше начать с 3-го вопроса, потому что это более конкретно. Просто любопытно, как вы, ребята, осваиваете Haskell.   -  person chipbk10    schedule 20.11.2012
comment
Требуется ли Haskell для этого проекта? Haskell сильно отличается от объектно-ориентированных языков; если у вас не было никакого опыта работы с парадигмой функционального программирования, вам следует уделить себе больше времени на изучение и, если возможно, выбрать более знакомый язык для надвигающегося дедлайна.   -  person Dan Burton    schedule 20.11.2012


Ответы (1)


Чтобы ответить на ваш первый вопрос (как выучить Haskell), я бы сказал, что вам нужно на самом деле кодировать его. Звучит так, как будто вы прочитали много глав книги «Learn You A Haskell», но от них у вас закружилась голова. Идите немного медленнее и, что более важно, продолжайте, набирая и оценивая код. Вы говорите, что «не знаете, с чего начать писать программу на Haskell». Практика написания и выполнения примеров будет именно тем, что вам нужно, чтобы понять, как работает код и с чего начать.

Вы, вероятно, не совсем готовы к ответу на свой второй вопрос (когда использовать Monad и когда использовать Applicative) — тем не менее, поработайте с LYAH, и вы точно будете знать, когда использовать каждый из них.

Что касается ориентированных графов, это хороший ресурс (обзоры Amazon не очень хороши, но я думаю, что это отличное введение в концепции графов и абстрактных типов данных в Haskell).

Удачи - Haskell стоит борьбы!

person amindfv    schedule 20.11.2012