Alexander
хитрый инстанс Foldable для (,)?
Alexander
хотя да, это логично, в паре все по правому элементу делается
Maxim
так же, как и length (1,2) == 1
Alexander
я скорее удивлен что он есть
Alexander
не хитрый, а единственно возвможный
Maxim
некоторые кастомные прелюды этот инстанс выкидывают :)
Alexander
все что может быть написано - должно быть написано
Alexander
инстанс выкинуть невозможно
Alexander
никак вообще
Maxim
ну какая разница как именно, но эффект в этом
Alexander
в чем эффект?
Maxim
что инстанса нет =)
Alexander
инстанс foldable для пары всегда естт
Alexander
этого не может быть
Alexander
ну можно сделать свою пару…
Alexander
можно или свой Foldable
Maxim
> length (1,2) <interactive>:2:1: error: • Do not use 'Foldable' methods on tuple
Alexander
Foldable даже проще
Maxim
я понятия не имею как это работает конечно
Alexander
:i Foldable
Maxim
да инстанс на месте
Maxim
instance Foldable ((,) a) -- Defined in ‘Data.Foldable’
Maxim
но воспользоваться им не дадут
Maxim
кстати, как такие кастомные еррор мессаджы делаются?
Alexander
если я не ошибаюсь при большом желании можно перезаписать любой метод
Alexander
ну и переписали метод из инстанса на error небось
Vadim
ребят
Vadim
а кто Bartosz Milewski переводит?
Vadim
на ютубе уроки его по теркату
кана
есть польностью переведенная его "книга"
кана
https://henrychern.wordpress.com/2017/07/17/httpsbartoszmilewski-com20141028category-theory-for-programmers-the-preface/
Vadim
спасибо
Alexander
у тебя ж Universum под рукой а Container.Class
Alexander
там примеры
Maxim
посмотрел, прикольно
Cheese
не хитрый, а единственно возвможный
проблема в том, что он делает неправильный код легальным
Alexander
как это?
Alexander
код правильный, но он делает не то, что ты хочешь от него
Alexander
sort [2,4,3] тоже не возвращает [4,2,3]
Alexander
даже если я этого хочу
Alexander
least surprise наверное тут тоже не встречен, и.к. warning от компилятора как у серокелов наверное лучше
кана
sort _ = [] print $ sort [1, 2]
Alexander
чем отсутствие инстанса или наличие
кана
код абсолютно верный
Alexander
вполне возможно, спецификации нету чтобы ответить на него
Alexander
название не очень удачное
кана
ну так и название length не очень удачное для пары
Alexander
вот инстанс фолдабл для пары удовлетворяет законам?
Ilya
вот инстанс фолдабл для пары удовлетворяет законам?
Да, причём даже тем, которых нет в самом классе
Alexander
у нас есть (a,b) сколько тут элементов типа b?
Alexander
неужели 2?
Alexander
а размер тупля меняется если мы first-ом меняем тип первого значения?
Alexander
ну и как обычно, все инстансы которые могут быть написаны - должны быть написаны
Alexander
есть конечно и минус при рефакторинга можно неожиданно для себя не тот код получить
Алексей
Просто туплю иногда воспринимают как data Pair a = (a, a)
Ilya
ну и как обычно, все инстансы которые могут быть написаны - должны быть написаны
Если написать все инстансы, которые могут быть написаны, то это тупо не скомпилируется, из-за множества пересечений
Ilya
Приходится выбирать, как инстансы писать сразу, а какие только с ньютайпами
Alexander
Если написать все инстансы, которые могут быть написаны, то это тупо не скомпилируется, из-за множества пересечений
для любого типа для которого может однозначно быть выбран инстанс он должен быть написан
Alexander
так лучше?
Alexander
для тупля нету другого варианта
Alexander
а запретить туплю и использовать вместо нее Writer - это кажется не менее странным чем инстанс для тупли
Cheese
код правильный, но он делает не то, что ты хочешь от него
валидный, но явно неправильный. нельзя взять максимум или длину от пары
Cheese
потому что пара не похожа на что-то перечислимое
Alexander
почему?
Алексей
maximum ("blaj", 1)?
Cheese
мой здравый смысл подсказывает
Cheese
мой мозг не видит в этом смысла
Алексей
Нельзя слишком сильно полагаться на здравый смысл
Alexander
а хаскель то тут при чем?
Cheese
если в этом нет смысла, это нельзя компилировать. иначе получается яваскрипт
Alexander
Foldable это о входящих переменных тип a
Alexander
полагайся на математику и законы
Alexander
она лучше чем мозг
Cheese