eahqzsr
кана
а смысл в этом Special, так еще менее понятно, для чего это
A64m
классы в принципе плохо подходят вот для тагого-вто Special
кана
переименовывай тогда в C217bd09d
A64m
если же локальные инстансы в скоупе а-ля рефлекшон будут стандартной фичей - тогда и можно будет поговорить про всякие дефолт-классы
A64m
в нынешнем хаскеле их использовать неудобно просто
Anonymous
кана
Anonymous
http://hackage.haskell.org/package/base-4.11.1.0/docs/Data-Fixed.html
class HasResolution a where
Vladislav
A64m
ну т.е. инстанс-то сделан
Vladislav
ну если считать это инстансом, то да
A64m
просто можно сделать нормальный инстанс, а не генерирующий ошибку
кана
как выше я писал - дефолты под задачу в скоупе домена - хорошее решение наверное, но в виде универсального глобального, да и еще и в виде предка моноида - это чушь какая-то
A64m
да
Vladislav
просто можно сделать нормальный инстанс, а не генерирующий ошибку
можно, просто "нормальные" инстансы приводят к тайпчеку кода, который не должен тайпчекаться, типа length (a, b) = 1. Я понимаю, что это well-defined, и я сам пользуюсь Traversable для (,), но я также считаю, что было бы в сто раз лучше, если бы для этих целый был data Ann a b = Ann { annotation :: a, value :: b }, а для (,) был TypeError
Vladislav
Потому что поведение программист должен явно специфицировать, а не надеяться, что "it will do the right thing"
A64m
это допустимо.
eahqzsr
A64m
приоритетом языка должно быть удобство написания короткого и обобщенного кода, а тайпчек просто средство для того чтоб ничего не разваливалось
кана
в виде структуры - почему нет
A64m
у хаскеля тут много сильных сторон которые можно использовать
Vladislav
> а тайпчек просто средство для того чтоб ничего не разваливалось
я недавно дебажил код, потому что развалилось
Vladislav
из-за инстансов лишних
eahqzsr
A64m
в качестве языка который приоретизирует какие-то проверки ценой страданий и вербозного кода - хаскель плохой язык, у него тут куча слабых мест и в эту область лучше не соваться
Vladislav
поменял [a] на (x, [a]), конец немного предсказуем
Vladislav
в одном месте не обновил length на length . snd
кана
Data.Magma
Так это не в base, в своих либах ты можешь и моноид который хочешь определить, и вообще что захочешь
Vladislav
полчаса искал
Vladislav
A64m
всего-то полчаса
Vladislav
это были страшные полчаса
Vladislav
лучше я еще пять ньютайпов наверну
A64m
надо было [a] на Compose (x, [a]) менять просто
A64m
все бы продолжило работать как раньше
Vladislav
Compose ((,) x) [] a?
A64m
да
кана
tuplesection на типах работает?
Vladislav
Нет
eahqzsr
кана
так а мы обсуждаем base же
кана
вот сейчас я сделаю либу, где Num => Monoid
кана
и буду тебе говорить, что так надо
кана
и не важно, что не в base
eahqzsr
кана
а с Default => Monoid теряешь смысл
Vladislav
да
Хороший вариант. А также напоминает мне о кошмарной эргономике ньютайпов, с которой я вынужден согласиться.
A64m
да, пока ньютайпам UX не поправят все эти разговоры про "я лучше в ньютайпы оборачивать буду" так разговорами и останутся. никто не хочет оборачивать в ньютайпы
Vladislav
На самом-то деле с ума я тогда чуть не сошел, потому что думал, что List.length примерно равен length @[], и что у меня уж точно нужный инстанс выбирался (для списка)
eahqzsr
Vladislav
где import qualified Data.List as List
Vladislav
а когда я обнаружил (вспомнил), что List.length перегруженный, то тогда и понял как исправлять
A64m
да, есть такая проблема
кана
да госпади, Default определяет значение для типа, в моноиде mempty не для типа, а для операции, это блин разные вещи
если найдешь способ делать инстанс Default для конкрнтой операции, то тогда можно сделать что-то типа
{M : Type} {f : M -> M} {{ x : M } : Default f}
Monoid m = { (<>) = f, zero = x }
A64m
но без нее слишком много кода поломали бы
eahqzsr
Vladislav
> да госпади, Default определяет значение для типа, в моноиде mempty не для типа, а для операции, это блин разные вещи
Ну по-моему утверждение @eahqzsr в том, что так же, как Default выбирает значение для типа, Monoid выбирает операцию для типа
Vladislav
тоже достаточно арбитрарно
Vladislav
"из общих соображений" как @A64m_qb0 говорит
eahqzsr
A64m
выбор операций и значений не сопоставим, правда
eahqzsr
Vladislav
это еще почему, операция это тоже значение
eahqzsr
кана
ну это вы какие-то доебки уже погнали
A64m
операций обычно 1-2 ходовых и 2-3 экзотических а значений - двузначные степени двойки
eahqzsr
A64m
часто используемых
Vladislav
eahqzsr
Значений часто используемых тоже немного
Vladislav
2 ходовых значения, True и False
Vladislav
и еще одно экзотическое, bottom
eahqzsr
Vladislav
у классов два инстанса не бывает
Зигохистоморфный
у кого-то нет работы