История изменений
Исправление
hateyoufeel,
(текущая версия)
:
Как она может быть ассоциативна если (A join B) join C не равно A join (B join C)?
что такое A, B и C здесь?
Она ассоциативна, потому что для m (m (m a)) ты можешь сделать join в любом порядке. Здесь join . join == join . fmap join, то есть ты можешь применять join как изнутри наружу, так и снаружи внутрь. Ты просто думаешь о значениях, а тут ассоциативность работает для собственно типа m.
ghci> let x = Just (Just (Just 1))
ghci> join . join $ x
Just 1
ghci> join (fmap join x)
Just 1
Просто представь на секунду, что m (m (m a)) записывается как (m + m + m) a. Тогда это сразу станет понятнее.
Ассоциативная операция тут, КМК — это последовательное применение блока do к каждому элементу массива.
Нет. Смотри выше.
Исправление
hateyoufeel,
:
Как она может быть ассоциативна если (A join B) join C не равно A join (B join C)?
что такое A, B и C здесь?
Она ассоциативна, потому что для m (m (m a)) ты можешь сделать join в любом порядке. Здесь join . join == join . fmap join, то есть ты можешь применять join как изнутри наружу, так и снаружи внутрь. Ты просто думаешь о значениях, а тут ассоциативность работает для собственно типа m.
ghci> let x = Just (Just (Just 1))
ghci> join . join $ x
Just 1
ghci> join (fmap join x)
Just 1
Ассоциативная операция тут, КМК — это последовательное применение блока do к каждому элементу массива.
Нет. Смотри выше.
Исправление
hateyoufeel,
:
Как она может быть ассоциативна если (A join B) join C не равно A join (B join C)?
A, B и C здесь?
Она ассоциативна, потому что для m (m (m a)) ты можешь сделать join в любом порядке. Здесь join . join == join . fmap join, то есть ты можешь применять join как изнутри наружу, так и снаружи внутрь. Ты просто думаешь о значениях, а тут ассоциативность работает для собственно типа m.
ghci> let x = Just (Just (Just 1))
ghci> join . join $ x
Just 1
ghci> join (fmap join x)
Just 1
Ассоциативная операция тут, КМК — это последовательное применение блока do к каждому элементу массива.
Нет. Смотри выше.
Исправление
hateyoufeel,
:
Как она может быть ассоциативна если (A join B) join C не равно A join (B join C)?
A, B и C здесь?
Она ассоциативна, потому что для m (m (m a)) ты можешь сделать join в любом порядке. Здесь join . join == join . fmap join, то есть ты можешь применять join как изнутри наружу, так и снаружи внутрь.
ghci> let x = Just (Just (Just 1))
ghci> join . join $ x
Just 1
ghci> join (fmap join x)
Just 1
Ассоциативная операция тут, КМК — это последовательное применение блока do к каждому элементу массива.
Нет. Смотри выше.
Исходная версия
hateyoufeel,
:
Как она может быть ассоциативна если (A join B) join C не равно A join (B join C)?
A, B и C здесь?
Она ассоциативна, потому что для m (m (m a)) ты можешь сделать join в любом порядке. Здесь join . join == join . fmap join, то есть ты можешь применять join как изнутри наружу, так и снаружи внутрь.
ghci> let x = Just (Just (Just 1))
ghci> join . join $ x
Just 1
ghci> join (fmap join x)
Just 1