История изменений
Исправление 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