Aleksei (astynax)
Или единица!
eahqzsr
mempty и mappend только в паре идут
Aleksei (astynax)
Смотря какая операция ;)
Dmitry
когда?
Ilya
или 42
Алексей
Обычно ноль. Почему его не сделали моноидом по сложению?
Max
MAX_INT
кана
еще раз, если нужен дефолтный элемент, то это уже задача в скоупе домена, поэтому и нужно делать свой класс и свои инстансы ровно под задачу
Aleksei (astynax)
Для произведения нейтральный элемент - единица
Алексей
Произведение нужно реже
кана
Алексей
Можно и обернуть
Aleksei (astynax)
Max
Делаем два моноида?
Aleksei (astynax)
"Нужно реже" - плохой аргумент. Поэтому есть Sum и Product, да
Алексей
Обёртки страшно мешаются
Aleksei (astynax)
Не оборачивай
Ilya
кана
мешаются, вроде правильно
Алексей
Тогда нет моноида. Вот е меня есть идея API построенного вокруг мотоидов, но т.к. Int & whatever не моноиды — вероятно придётся дублировать для моноидов и для сложения
кана
ну вообще лучше "мешают", но "мешаются" тоже есть в употреблении
Aleksei (astynax)
Они и должны "мешать" - выбираешь конкретный инстанс же
кана
натуральное
eahqzsr
Давай, ещё лямду напиши
Aliester
почитал аргументацию сторонников формальной верификации
Алексей
Aliester
они еще более свихнутые чем хаскелисты
Aleksei (astynax)
Ilya
Алексей
A64m
Я тоже недоволен тем, что для чисел инстанса моноида (+,0) нету.
Алексей
Два возможных. Нужно выбрать
Один более полезный и намного более часто употребляемый, потому его следовало бы поставить по умолчанию, а для умножение обрнёте, не переломитесь
A64m
делать более используемый инстанс для типа и менее используемый для обертки - нормальная практика см. инстансы для списка и ZipList например
A64m
и умножение явно менее полезный инстанс чем сложение
Ilya
зачем вам моноид по сложению, если можно просто сделать sum?
Ilya
для интов
A64m
А дефолтный элемент без операции определить вполне можно - соотв. зануленной памяти.
Aleksei (astynax)
Вообще Sum использую столь же редко, что и Product, если честно
Алексей
Чтобы работать с моноидами полиморфно и иметь сложение как частный случай
A64m
для интов
sum для контейнера с числами будет работать только а моноид может и с более сложной структурой, включающей в себя числа
Anonymous
Ну вообще требуемы тайпкласс больше напоминает Bounded a, непонятно откуда такая экзальтация насчет операций и моноидов
eahqzsr
A64m
вообще ни разу в жизни Product не использовал, для чего он вообще - факториалы писать?
eahqzsr
Ноль определён через операцию вообще-то
Ilya
A64m
так я про то и говорю, что не только список будет работать
A64m
(хотя, если бы люди больше моноидные конфиги использовали, самым ходовым инстансом моноида для интов был бы First)
Leonid 🦇
Last скорее
Aleksei (astynax)
Лучше бы First и Last были полугруппами :)
Aleksei (astynax)
Но исторически сложились моноеды
Алексей
Полугруппы тоже есть
Leonid 🦇
@astynax у вас там что, ghc 7.10?
Aleksei (astynax)
У First внутре Maybe, а если бы была только полугруппа без моноида, то не было бы
Leonid 🦇
http://hackage.haskell.org/package/base-4.11.1.0/docs/Data-Semigroup.html#t:Last
Leonid 🦇
newtype Last a = Last { getLast :: a }
Aleksei (astynax)
Хмм. И правда, отстал от жизни :)
Aleksei (astynax)
Так норм
Aleksei (astynax)
Так. Но в Data.Monoid то остался First с Maybe унутре!
Алексей
Так он тоже нужен
Aleksei (astynax)
Нет, не нужен
Алексей
Мне нужен
Алексей
Иногда
Aleksei (astynax)
Option + First из Semigroup
Cheese
использовать Nothing вместо дефолтного элемента уже советовали?
Aleksei (astynax)
Это ты к кому вопрос обратил?
Cheese
ещё есть AsEmpty в линзах
Cheese
Aleksei (astynax)
Псто тут несколько одновременных тредов
Cheese
к отвечающим на вопрос о классе для нейтрального элемента без моноида
Aleksei (astynax)
Так в том то и соль, что элемент - не нейтральный, если нет операции (нейтральность по отношению к чему-то бывает же)
Cheese
потому и Nothing
Ilya
Так внутри нафинга нет ничего
Aleksei (astynax)
Nothing означает "ничего", а элемент - вполне себе "чего"
Aleksei (astynax)
Впрочем логика трактовки элементов может обрабатывать Nothing
Ilya
Но можно сделать функцию из Maybe в нужный тип
Ilya
которая добавляет семантику как раз
Aleksei (astynax)
Ага. И в этой функции можно учесть уже и несколько допустимых умолчаний и прочее
Cheese
именно
eahqzsr