Почему сгиб над длиной списка не является моноидом?
length = foldr (\_ n -> 1+n) 0
Разве он не ассоциативен и имеет нейтральный элемент 0
, так что он должен быть моноидом?
Почему сгиб над длиной списка не является моноидом?
length = foldr (\_ n -> 1+n) 0
Разве он не ассоциативен и имеет нейтральный элемент 0
, так что он должен быть моноидом?
Мне трудно понять, о чем вы на самом деле спрашиваете, и у меня есть подозрение, что точная формулировка утверждения из вашей лекции может иметь значение.
Но в самой интуитивной интерпретации я могу думать, что вы правы, поскольку математически функция length
является «гомоморфизмом моноидов», отображающим моноид списков с операцией конкатенации в моноид целых чисел с операция сложения.
Технически это не так в Haskell, но в основном по той причине, что числовые типы не имеют экземпляра Monoid
, потому что есть две очевидные операции на выбор: сложение и умножение. Другая причина в том, что списки в Haskell могут быть бесконечными, поэтому length
не всегда дает результат.
(\_ n -> 1+n) 0
, которая является определением функции длины. Но почему это именно пример противоположного определения? я наполняю его - person fragant   schedule 12.07.2015[a] -> Integer
, это действительно не моноид. - person mniip   schedule 12.07.2015