LINUX.ORG.RU

История изменений

Исправление 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. Тогда это сразу станет понятнее.

@gns

Ассоциативная операция тут, КМК — это последовательное применение блока 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

@gns

Ассоциативная операция тут, КМК — это последовательное применение блока 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

@gns

Ассоциативная операция тут, КМК — это последовательное применение блока 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

@gns

Ассоциативная операция тут, КМК — это последовательное применение блока 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