?

Log in

то же самое верно в отношении сепулек - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

то же самое верно в отношении сепулек [апр. 14, 2013|05:19 pm]
Anatoly Vorobey
[Tags|]

Совет про то, как понять монады, из презентации What I Wish I Knew When Learning Haskell:
Eightfold Path to Monad Satori

  1. Don't read the monad tutorials.
  2. No really, don't read the monad tutorials.
  3. Learn about Haskell types.
  4. Learn what a typeclass is.
  5. Read the Typeclassopedia.
  6. Read the monad definitions.
  7. Use monads in real code.
  8. Don't write monad-analogy tutorials.
Мне особенно нравится, как последний пункт замыкает круг, начатый первым.

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

Comments:
[User Picture]From: cema
2013-04-14 03:09 pm
Ну можно изучать Хаскель, а можно математику. Соответственно, монады либо появятся сами собой в процессе изучения языка, либо... появятся сами собой в процессе изучения науки. :-) А начинать с них ни к чему. Видимо, так.
(Ответить) (Thread)
From: huzhepidarasa
2013-04-14 03:52 pm
Монады появляются сами собой у гениев.
(Ответить) (Parent) (Thread)
[User Picture]From: onkel_hans
2013-04-14 04:35 pm
Вы не путаете с трихомонадами?
(Ответить) (Parent) (Thread)
[User Picture]From: cema
2013-04-15 05:39 am
Или у тех, кто серьезно изучает материал.
(Ответить) (Parent) (Thread)
From: huzhepidarasa
2013-04-14 03:16 pm
Хорошая презентация. Но монады нельзя понять только из определений. Нужно понять их связь с сопряженными функторами. Только тогда может наступить сатори (а может и не наступить).
(Ответить) (Thread)
[User Picture]From: onkel_hans
2013-04-14 04:34 pm
Все обобщение неверны. Включая данное.
Но нельзя же не обобщать.
(Ответить) (Thread)
[User Picture]From: migmit
2013-04-14 08:27 pm
Ну, кое-где он явно гонит. Скажем, pointfree просто не собирается с нынешней mtl (и уже довольно давно).
(Ответить) (Thread)
From: huzhepidarasa
2013-04-14 09:04 pm
А чего это у меня pointfree 1.0.4.3 только что вот буквально собралось с mtl вот буквально 2.1.2?
(Ответить) (Parent) (Thread)
[User Picture]From: migmit
2013-04-15 04:07 am
Понял свою ошибку. Читать "не собирается с нынешней base".
(Ответить) (Parent) (Thread)
From: huzhepidarasa
2013-04-15 07:49 am
Кажется, послеедняя base регулярно ломает половину всего, нет?
(Ответить) (Parent) (Thread)
[User Picture]From: janatem
2013-04-14 08:28 pm
Вроде правильно. Только, возможно, в самом начале знакомства с Хаскелем не стоит сразу смотреть определение IO монады, а временно считать, что ввод/вывод — это ad hoc конструкции языка. То есть пункт (6) немного отложить.
(Ответить) (Thread)
[User Picture]From: avva
2013-04-14 08:30 pm
А почему вы считате, что правильно?
(Ответить) (Parent) (Thread)
[User Picture]From: janatem
2013-04-14 09:03 pm
Потому что кто-то использовал звонкое мемопорождающее слово «монада» для обозначения довольно заурядной сущности. В стандартной библиотеке полно классов сравнимых по сложности с классом Monad, и, хотя монады довольно важны и часто используются, они не являются чем-то особенным, заслуживающим отдельных туториалов.

Я сам какое-то время перся с монад и даже засовывал их в SML-ный код, хотя в SML нет классов, так что приходилось описывать монадные операции для каждого типа отдельно и, что самое неудобное, именовать по-разному. Задним числом я осознаю, что тогда мне по сути нужны были комбинаторы (и функциональное программирование приучает к такому стилю), чтобы оперировать объектами, не заглядывая в их потроха без необходимости. Где-то для этого, действительно, удобны именно монадные операции, где-то другие комбинаторы.

Сейчас я достаточно хорошо знаю Хаскель, чтобы утверждать, что класс Monad — обычная рабочая лошадка наравне с другими.
(Ответить) (Parent) (Thread)
[User Picture]From: max630
2013-04-14 08:54 pm
за несколько часов уже 3 независимый пост про хаскель. Видимо, солнечные вспышки влияют
(Ответить) (Thread)
[User Picture]From: herr_sgor
2013-04-14 10:14 pm
Монада аналогична эпифизу в его понимании Декартом.
(Ответить) (Thread)
[User Picture]From: dimrub
2013-04-15 07:06 am
Можно ли считать эту рекомендацию тюториалом по монадам, и если да, есть ли смысл читать далее первого пункта? Ну, хорошо, второго?
(Ответить) (Thread)
From: huzhepidarasa
2013-04-15 07:41 am
Тюториал по X содержит правила пользования X. Это правила пользования тюториалами по монадам. Тюториалы же по монадам сами не являются монадами, кажется, никогда ;)
(Ответить) (Parent) (Thread)