Монады
От: Евгений Кирпичев aka jkff Россия antilamer.livejournal.com
Дата: 30.12.08 16:34
Оценка: 1675 (25)
Статья:
Монады
Автор(ы): Евгений Кирпичев aka jkff
Дата: 28.12.2008
Статья рассказывает о том, что такое монады Haskell, приводятся примеры, иллюстрирующие эту концепцию.


Авторы:
Евгений Кирпичев aka jkff

Аннотация:
Статья рассказывает о том, что такое монады Haskell, приводятся примеры, иллюстрирующие эту концепцию.
Re[3]: Монады
От: BulatZiganshin  
Дата: 01.03.09 16:21
Оценка: :))
Здравствуйте, VladD2, Вы писали:

BZ>>ага, введение+заключение. тема я считаю не раскрыта


VD>Дык, раскрой. А, языком молоть все горазды.


для заскеллера написание monad tutorial — всё равно что для девушки лишение девственности. неужели ты думаешь я не отметился?
Люди, я люблю вас! Будьте бдительны!!!
Re[4]: Монады
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.03.09 22:31
Оценка: +1 :)
Здравствуйте, VoidEx, Вы писали:

VE>Ты бы читал то, на что отвечаешь.


Ты хочешь сказать, что я случайным образом ответы пишу? Ну, тыкаю не глядя на сообщение и пишу ответ на вымышленные слова?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Монады
От: Аноним  
Дата: 05.08.09 22:06
Оценка: 2 (1)
Мне кажется, что в текст статьи вкралась ошибка.

Из-за реализации функции freqs и того способа, которым она используется, результаты будут неверные.
Если в списке, который принимает в качестве аргумента функция freqs, более двух элементов, второй элемент списка выберется не с вероятностью w2, как ожидается, а с вероятностью w2*(1-w1).

Привожу свой расчёт вероятности столкновения при красном свете. Событие "столкновение" — это объединение несовместных событий вида
"первый водитель имеет тип 'А' И второй водитель имеет тип 'Б' И первый поехал И второй поехал И столкнулись".
Так как осторожные водители на красный свет не едут, задача упрощается.
data Drivers = Normal | Aggressive

p Normal = 0.6
p Aggressive = 0.2

pDrive Normal = 0.1
pDrive Aggressive = 0.3

pCollisionIf2Drive = 0.3

d = [Aggressive, Normal]

p2Dr = sum [p d1 * p d2 * pDrive d1 * pDrive d2 | d1 <- d, d2 <- d]

main = print $ pCollisionIf2Drive * p2Dr


Результат — 0.00432, не такой, как статье.
--
Gebb
Re: Монады
От: Аноним  
Дата: 31.12.08 10:44
Оценка: :)
ЕКA>Статья рассказывает о том, что такое монады Haskell, приводятся примеры, иллюстрирующие эту концепцию.

Не читал, но одобряю.
Re[5]: Монады
От: BulatZiganshin  
Дата: 06.03.09 15:30
Оценка: :)
Здравствуйте, VladD2, Вы писали:

BZ>>для заскеллера написание monad tutorial — всё равно что для девушки лишение девственности. неужели ты думаешь я не отметился?


VD>А что мне думать то? Оформляешь материал в соответствии с url=http://rsdn.ru/?article/authors


по-моему, самое подходящее для rsdn описание монад дала Андреа Россато так что если знаешь английский — вперёд, переводи и печатай
Люди, я люблю вас! Будьте бдительны!!!
Re: Монады
От: BulatZiganshin  
Дата: 30.12.08 17:01
Оценка:
Здравствуйте, Евгений Кирпичев aka jkff, Вы писали:

ЕКA>Статья рассказывает о том, что такое монады Haskell, приводятся примеры, иллюстрирующие эту концепцию.


ага, введение+заключение. тема я считаю не раскрыта
Люди, я люблю вас! Будьте бдительны!!!
Re[2]: Монады
От: Аноним  
Дата: 30.12.08 19:58
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>Здравствуйте, Евгений Кирпичев aka jkff, Вы писали:


ЕКA>>Статья рассказывает о том, что такое монады Haskell, приводятся примеры, иллюстрирующие эту концепцию.


BZ>ага, введение+заключение. тема я считаю не раскрыта


Дык там, типа, "Полная версия этой статьи опубликована в журнале RSDN Magazine #3-2008".

Примерно такую же по полноте охвата английскую версию, но целиком, можно почитать на spbhug.folding-maps.org/wiki/MonadsEn .
Re: Монады
От: Аноним  
Дата: 30.12.08 20:27
Оценка:
Здравствуйте, Евгений Кирпичев aka jkff, Вы писали:

ЕКA>Аннотация:

ЕКA>Статья рассказывает о том, что такое монады Haskell, приводятся примеры, иллюстрирующие эту концепцию.

А люди все пишут и пишут про монады :).
Re[2]: Монады
От: geniepro http://geniepro.livejournal.com/
Дата: 31.12.08 05:05
Оценка:
Здравствуйте, http://lj.rossia.org/~peter_lemenkov/, Вы писали:

PL>А люди все пишут и пишут про монады .


Монады неисчерпаемы как атом!
Re[2]: Монады
От: Аноним  
Дата: 31.12.08 05:22
Оценка:
Здравствуйте, http://lj.rossia.org/~peter_lemenkov/, Вы писали:

HLR>Здравствуйте, Евгений Кирпичев aka jkff, Вы писали:


ЕКA>>Аннотация:

ЕКA>>Статья рассказывает о том, что такое монады Haskell, приводятся примеры, иллюстрирующие эту концепцию.

HLR>А люди все пишут и пишут про монады .


A haskell newbie is the one who wrote monad tutorial only.
Re: Монады
От: nikov США http://www.linkedin.com/in/nikov
Дата: 19.02.09 17:01
Оценка:
Здравствуйте, Евгений Кирпичев aka jkff, Вы писали:

ЕКA>Аннотация:

ЕКA>Статья рассказывает о том, что такое монады Haskell, приводятся примеры, иллюстрирующие эту концепцию.

ЕКA>
ЕКA>return a = Just a
ЕКA>Nothing >>= f = Nothing 
ЕКA>(Just a) >>= f = f a
ЕКA>


Разве последняя строчка не должна быть такой:
(Just a) >>= f = Just (f a)

?
Re[2]: Монады
От: jkff Россия antilamer.livejournal.com
Дата: 19.02.09 17:04
Оценка:
Здравствуйте, nikov, Вы писали:

ЕКA>>
ЕКA>>return a = Just a
ЕКA>>Nothing >>= f = Nothing 
ЕКA>>(Just a) >>= f = f a
ЕКA>>


N>Разве последняя строчка не должна быть такой:

N>
N>(Just a) >>= f = Just (f a)
N>

N>?

Нет, не должна. f :: Maybe a -> (a -> Maybe b) -> Maybe b, а не просто b.
Re[3]: Монады
От: nikov США http://www.linkedin.com/in/nikov
Дата: 19.02.09 17:12
Оценка:
Здравствуйте, jkff, Вы писали:

J>Нет, не должна. f :: Maybe a -> (a -> Maybe b) -> Maybe b, а не просто b.


А разве не f :: a -> Maybe b ?
Впрочем, в первом предположении я действительно ошибся.
Re[4]: Монады
От: jkff Россия antilamer.livejournal.com
Дата: 19.02.09 17:13
Оценка:
Здравствуйте, nikov, Вы писали:

N>Здравствуйте, jkff, Вы писали:


J>>Нет, не должна. f :: Maybe a -> (a -> Maybe b) -> Maybe b, а не просто b.


N>А разве не f :: a -> Maybe b ?

Да, тут я поторопился

N>Впрочем, в первом предположении я действительно ошибся.
Re: Монады
От: Аноним  
Дата: 19.02.09 22:29
Оценка:
В бесконечном случае функция распределения нам, на самом деле, не нужна. Действительно, для чего она вообще может понадобиться? Обычно ее интегрируют по интервалу, чтобы получить вероятность попадания значения в заданный интервал

Мне кажется, или автор путает функцию распределения с плотностью вероятности?
Re[2]: Монады
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.02.09 21:00
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>ага, введение+заключение. тема я считаю не раскрыта


Дык, раскрой. А, языком молоть все горазды.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Монады
От: VoidEx  
Дата: 01.03.09 12:33
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Дык, раскрой. А, языком молоть все горазды.


Ты бы читал то, на что отвечаешь.
Re[4]: Монады
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.03.09 22:57
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>для заскеллера написание monad tutorial — всё равно что для девушки лишение девственности. неужели ты думаешь я не отметился?


А что мне думать то? Оформляешь материал в соответствии с правилами
Автор(ы): The RSDN Group
Дата: 27.10.2002
, присылаешь на submit@rsdn.ru, статью рассматривают, корректируют, выкладывают на сайт и тогда можно будет поглядеть на ее оценку и критику.

Лично я сильно сомневаюсь, что ты способен доходчиво объяснить данную тему для тех кому она не понятна. Причем не потому, что ты тупой или писать не умеешь, а потому, что ты слишком давно варишься в функциональной каше и многие не очевидные для новичков вещи ты воспринимаешь как само собой разумеющиеся.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Монады
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 06.03.09 15:26
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А что мне думать то? Оформляешь материал в соответствии с правилами
Автор(ы): The RSDN Group
Дата: 27.10.2002
, присылаешь на submit@rsdn.ru, статью рассматривают, корректируют, выкладывают на сайт и тогда можно будет поглядеть на ее оценку и критику.


Ну, rsdn — не единственный сайт в интернете.

VD>Лично я сильно сомневаюсь, что ты способен доходчиво объяснить данную тему для тех кому она не понятна. Причем не потому, что ты тупой или писать не умеешь, а потому, что ты слишком давно варишься в функциональной каше и многие не очевидные для новичков вещи ты воспринимаешь как само собой разумеющиеся.


Кстати, чтобы не было "не читал, но осуждаю" — почитай и оцени. По моему, Булат вполне доходчиво объясняет для уровня новичков. По моему личному рейтингу — это лучшая статья по устройству IO монады именно для новичков.
Re: Монады
От: qomp Украина  
Дата: 19.03.09 15:55
Оценка:
Не поделится ли кто информацией о применении монад в Erlang. Или может приведет свои соображения на тему: а нужны ли монады в Erlang вообще? Может там ему и так хорошо...
erlang
Re[2]: Монады
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.03.09 18:09
Оценка:
Здравствуйте, qomp, Вы писали:

Q>Не поделится ли кто информацией о применении монад в Erlang. Или может приведет свои соображения на тему: а нужны ли монады в Erlang вообще? Может там ему и так хорошо...


А какой смысл ты видишь в монадах для динамическитипизированного языка?
В принципе, конечно, можно что-нибудь изобразить, но смысл?
Re[3]: Монады
От: thesz Россия http://thesz.livejournal.com
Дата: 19.03.09 21:44
Оценка:
Q>>Не поделится ли кто информацией о применении монад в Erlang. Или может приведет свои соображения на тему: а нужны ли монады в Erlang вообще? Может там ему и так хорошо...
К>А какой смысл ты видишь в монадах для динамическитипизированного языка?
К>В принципе, конечно, можно что-нибудь изобразить, но смысл?

Имеет некоторый смысл.

Я как-то делал для Гапертона прототип некоей фичи (на Хаскеле, но чтобы работало на Эрланге), получилось достаточно весело и очень похоже на State monad. Только состояние надо было протягивать явно.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[4]: Монады
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.03.09 22:02
Оценка:
Здравствуйте, thesz, Вы писали:

T>Я как-то делал для Гапертона прототип некоей фичи (на Хаскеле, но чтобы работало на Эрланге), получилось достаточно весело и очень похоже на State monad. Только состояние надо было протягивать явно.


Ну если явно протягивать, то так же почти все процессы на Эрланге работают, но какой плюс тут от монадности? Может, я как человек, ещё не написавший свой monad tutorial, просто не вижу его?
Re[5]: Монады
От: thesz Россия http://thesz.livejournal.com
Дата: 20.03.09 09:41
Оценка:
T>>Я как-то делал для Гапертона прототип некоей фичи (на Хаскеле, но чтобы работало на Эрланге), получилось достаточно весело и очень похоже на State monad. Только состояние надо было протягивать явно.

К>Ну если явно протягивать, то так же почти все процессы на Эрланге работают, но какой плюс тут от монадности? Может, я как человек, ещё не написавший свой monad tutorial, просто не вижу его?


Я наврал насчёт "явно протягивать". Наоборот, состояние было неявным параметром и был набор комбинаторов, как получить преобразованное состояние.

Типа, здесь мы играем, а здесь рыбу заворачиваем. Получаются ноты.

Если у тебя есть ФВП, то сделать такое очень легко. Понимание получается чуток лучше, чем если мы протягиваем состояние явно. Например, стоит minus(average(),signal()) вместо Averaged = average(Signal), minus(Averaged,Signal).

Вот.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[6]: Монады
От: Курилка Россия http://kirya.narod.ru/
Дата: 20.03.09 10:14
Оценка:
Здравствуйте, thesz, Вы писали:

T>Я наврал насчёт "явно протягивать". Наоборот, состояние было неявным параметром и был набор комбинаторов, как получить преобразованное состояние.

Продемонстрировать нельзя по NDA чтоль?

T>Типа, здесь мы играем, а здесь рыбу заворачиваем. Получаются ноты.

Как-то ну очень чёткое описание

T>Если у тебя есть ФВП, то сделать такое очень легко. Понимание получается чуток лучше, чем если мы протягиваем состояние явно. Например, стоит minus(average(),signal()) вместо Averaged = average(Signal), minus(Averaged,Signal).


И где тут состояние? Значение average() у тебя типа неявно передаётся?
Re[7]: Монады
От: thesz Россия http://thesz.livejournal.com
Дата: 20.03.09 10:36
Оценка:
T>>Я наврал насчёт "явно протягивать". Наоборот, состояние было неявным параметром и был набор комбинаторов, как получить преобразованное состояние.
К>Продемонстрировать нельзя по NDA чтоль?

Да я детали забыл. Это было почти год назад и меня никогда котировки очень не интересовали.

T>>Если у тебя есть ФВП, то сделать такое очень легко. Понимание получается чуток лучше, чем если мы протягиваем состояние явно. Например, стоит minus(average(),signal()) вместо Averaged = average(Signal), minus(Averaged,Signal).

К>И где тут состояние? Значение average() у тебя типа неявно передаётся?

Ну, да.

minus opa opb = combineTickets (-) opa opb
(про combineTickets не спрашивай. он был чем-то между zipWith и liftM2.

Ты не смотри, что я использовал signal(), который ничего не делает. На его место можно подставить любое выражение, например, average с параметром или что другое.

Плохо, что при использовании монадного ситнаксиса в Эрланге будет много скобок.

И тяжело сделать приличный синтаксис для не детерминированных монад, List, например.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[3]: Монады
От: qomp Украина  
Дата: 20.03.09 11:37
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Здравствуйте, qomp, Вы писали:


Q>>Не поделится ли кто информацией о применении монад в Erlang. Или может приведет свои соображения на тему: а нужны ли монады в Erlang вообще? Может там ему и так хорошо...


К>А какой смысл ты видишь в монадах для динамическитипизированного языка?

Прежде всего Erlang — декларативный язык и мне не понятно, в чем его дополнительная возможность быть динамическитипизированным отменяет
удобство монад, когда надо манипулировать состоянием.
К>В принципе, конечно, можно что-нибудь изобразить, но смысл?
Вот здесь ссылки http://www.acooke.org/cute/ErlangsSyn0.html, http://www.acooke.org/cute/MonadsinEr0.html — мужик не очень подробно написал, но мне показалось, что в этом есть какой то смысл пока еще разбираюсь...
Предварительно идея такая, как минимум парсер и конструктор синтаксических конструкций(Wiki-разметка,Текст, Html и т.д.),обработчик рекурсивных структур из кортежей и списков с использованием нечеткой логики.
Re: Монады
От: nikov США http://www.linkedin.com/in/nikov
Дата: 04.06.09 15:39
Оценка:
Здравствуйте, Евгений Кирпичев aka jkff, Вы писали:

ЕКA>Теперь, чтобы выполнить этот список действий, необходимо выполнить каждое из них по очереди.


ЕКA>
ЕКA>doIOs [] = return []
ЕКA>doIOs (a:as) = do a ; doIOs as 

ЕКA>doIOs (map putStrLn values)
ЕКA>


ЕКA>Если мы посмотрим в интерпретаторе на тип doIOs, то получится, что он – doIOs :: (Monad m) => [m a] -> m [a] . В нем не упоминается монада IO, он ЕКA>работает одинаково для всех монад! Логично слово «IO» убрать и из названия – получится стандартная функция


ЕКA>
ЕКA>sequence :: Monad m => [m a] -> m [a]
ЕКA>


Здесь пара неточностей. Во-первых, тип такой функции doIOs получится doIOs :: (Monad m) => [m a] -> m [b]. Во-вторых, чтобы эта функция собирала результаты и была эквивалентна sequence, ее надо переписать чуть посложнее:

doIOs [] = return []
doIOs (a:as) = do x <- a; xs <- doIOs as; return (x:xs)
Re: Монады
От: Pzz Россия https://github.com/alexpevzner
Дата: 05.08.09 23:45
Оценка:
Здравствуйте, Евгений Кирпичев aka jkff, Вы писали:

ЕКA>Статья:

ЕКA>Монады
Автор(ы): Евгений Кирпичев aka jkff
Дата: 28.12.2008
Статья рассказывает о том, что такое монады Haskell, приводятся примеры, иллюстрирующие эту концепцию.


По-моему, это
Автор: BulatZiganshin
Дата: 08.02.07
— одно из самых простых и понятных объяснений того, что такое монады, из тех, что я видел на русском языке. Даже я понял, что там написано
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.