
Index
17.07.2018
11:48:36
потому что зря

A64m
17.07.2018
11:48:51
нет

Алексей Ayaye :)
17.07.2018
11:49:11
с парой там minimum только неестественно работает, как я понял )

kana
17.07.2018
11:49:28
вообще возможно было бы полезно явно задать дефолтный инстанс в каком-то контексте, но не иметь дефолтный глобально

Google

kana
17.07.2018
11:49:55
это как утверждение "Возьмем моноид для чисел по сложению, тогда ..." и все в скоупе будет про него

Index
17.07.2018
11:50:12
нет
как выбирать-то дефолтный? каждому инстансу по ньютайпу, если не уникален

A64m
17.07.2018
11:50:33
нет, для всего, для чего инстанс может быть определен - он должен быть определен. если их может быть много выбрать один из общих соображений - остальные через обертки

Index
17.07.2018
11:50:55
"один из общих соображений" ок, пойду-ка отсюда

A64m
17.07.2018
11:51:15
ну, а как вообще все решения делаются по стандартной библиотеке?

Ilya
17.07.2018
11:51:18

Index
17.07.2018
11:51:23
я не считаю что руководствоваться "общими соображениями" это способ написать код или вообще что-то хорошее

A64m
17.07.2018
11:51:27
порядок аргументов в функциях и т.д.

Index
17.07.2018
11:51:40
порядка аргументов в функции быть не должно, должны быть именованные параметры

Ilya
17.07.2018
11:51:41

A64m
17.07.2018
11:52:04

Vladimir
17.07.2018
11:53:05
Особенно с полиморфизмом, когда у одной функции может быть разное их число.

Google

Index
17.07.2018
11:53:45
а имена у них какие?
в идеальном мире? UUID-ы, которые превращаются в имена в IDE по локали пользователя
точно пора уходить, пока меня не побили за такое

A64m
17.07.2018
11:54:19
в каждом следующем ответе @int_index удвивает абсурность

Index
17.07.2018
11:55:34
я только начал

shadowjack
17.07.2018
11:55:42

Ilya
17.07.2018
11:57:09
нет
Мы можем понаделать орфан инстансов моноида для Int, и делать import Data.Monoid.Int.Sum? Вроде как да. В этом значит не могут помочь новые модули?
Это просто то что хотел @kana_sama, кажется

A64m
17.07.2018
11:57:46
инстансы-то не модульны

Index
17.07.2018
11:58:07
Такой подход не сработает, если нужно более одного класса так выбрать

kana
17.07.2018
11:58:10
ну возможно не в таком виде, это сразу на весь файл скоуп вешает

Ilya
17.07.2018
11:58:46

Index
17.07.2018
11:58:53
Ньютайпы композятся, я могу написать Sum (Foo Integer), где Foo выберет какой-нибудь другой класс
И в принципе если у меня констрейнт (A x, B x, C x), я могу написать AInst (BInst (CInst x))

A64m
17.07.2018
11:59:45
слишком много распаковочного бойлерплейта

Index
17.07.2018
12:01:04
один coerce что ли?

A64m
17.07.2018
12:01:14
сделали бы для этого полегковеснее что-то

Index
17.07.2018
12:01:23
согласен

A64m
17.07.2018
12:01:32
вообще надо еще много чего придумать и сделать облегчающего работу с ньютайпами

Google

A64m
17.07.2018
12:06:53
но каким бы удобным не сделали выбор инстансов с помощью ньютайпов - все равно должны быть инстанс по умолчанию для любого типа, потому что отсутствие инстанса - проблема сама по себе - это значит кто кто-то будет писать сироты

kana
17.07.2018
12:07:43
вообще мы отошли от темы
если текущие идеи утопичны, то идея, что Default => Monoid - плохая идея, реальна

shadowjack
17.07.2018
12:09:52
Не более плохая чем Applicative => Monad
Там скорее должно быть Default, Magma => Monoid
Даже не магма а другой тип с ассоциативной операцией который тоже магма

kana
17.07.2018
12:11:03
да вот я сделал
data X = A | B | C
instance Default X where
def = C
instance Monoid X where
mempety = A
(<>) A x = x
(<>) x A = x
(<>) B C = A
(<>) C B = A
(<>) B B = C
(<>) C C = B
какая тут связь дефолта с моноидом вообще
и дефолтное значение хочу C
но нейтральным элементом это не будет
понятия нейтральности и дефолта вообще не совместимы
дефолтное значение PATH например пусть будет "/bin", но нейтральный для путей относительно композиции - "./" какой-нибудь

A64m
17.07.2018
12:12:24
моя позиция по осмысленности дефолтного значения такая:
оно имеет смысл в сочетании с операцией
либо как технически детали реализации "сплющивания структур", всяких стораблов и анбоксингов

shadowjack
17.07.2018
12:15:16

kana
17.07.2018
12:15:35
а смысл в этом Special, так еще менее понятно, для чего это

A64m
17.07.2018
12:15:42
классы в принципе плохо подходят вот для тагого-вто Special

kana
17.07.2018
12:15:57
переименовывай тогда в C217bd09d

shadowjack
17.07.2018
12:16:37

A64m
17.07.2018
12:17:26
если же локальные инстансы в скоупе а-ля рефлекшон будут стандартной фичей - тогда и можно будет поговорить про всякие дефолт-классы

Google

A64m
17.07.2018
12:17:53
в нынешнем хаскеле их использовать неудобно просто

dimiii
17.07.2018
12:18:11

kana
17.07.2018
12:18:25

dimiii
17.07.2018
12:18:31
http://hackage.haskell.org/package/base-4.11.1.0/docs/Data-Fixed.html
class HasResolution a where

Index
17.07.2018
12:18:39

A64m
17.07.2018
12:19:05
ну т.е. инстанс-то сделан

Index
17.07.2018
12:19:19
ну если считать это инстансом, то да

A64m
17.07.2018
12:19:22
просто можно сделать нормальный инстанс, а не генерирующий ошибку

kana
17.07.2018
12:19:29
как выше я писал - дефолты под задачу в скоупе домена - хорошее решение наверное, но в виде универсального глобального, да и еще и в виде предка моноида - это чушь какая-то

Admin
ERROR: S client not available

A64m
17.07.2018
12:20:05
да

Index
17.07.2018
12:21:48
просто можно сделать нормальный инстанс, а не генерирующий ошибку
можно, просто "нормальные" инстансы приводят к тайпчеку кода, который не должен тайпчекаться, типа length (a, b) = 1. Я понимаю, что это well-defined, и я сам пользуюсь Traversable для (,), но я также считаю, что было бы в сто раз лучше, если бы для этих целый был data Ann a b = Ann { annotation :: a, value :: b }, а для (,) был TypeError
Потому что поведение программист должен явно специфицировать, а не надеяться, что "it will do the right thing"

A64m
17.07.2018
12:22:12
это допустимо.

shadowjack
17.07.2018
12:22:23

A64m
17.07.2018
12:22:56
приоритетом языка должно быть удобство написания короткого и обобщенного кода, а тайпчек просто средство для того чтоб ничего не разваливалось

kana
17.07.2018
12:23:09
в виде структуры - почему нет

A64m
17.07.2018
12:23:15
у хаскеля тут много сильных сторон которые можно использовать

Index
17.07.2018
12:23:30
> а тайпчек просто средство для того чтоб ничего не разваливалось
я недавно дебажил код, потому что развалилось

Google

Index
17.07.2018
12:23:38
из-за инстансов лишних

shadowjack
17.07.2018
12:23:42

A64m
17.07.2018
12:23:57
в качестве языка который приоретизирует какие-то проверки ценой страданий и вербозного кода - хаскель плохой язык, у него тут куча слабых мест и в эту область лучше не соваться

Index
17.07.2018
12:24:03
поменял [a] на (x, [a]), конец немного предсказуем
в одном месте не обновил length на length . snd

kana
17.07.2018
12:24:29
Data.Magma
Так это не в base, в своих либах ты можешь и моноид который хочешь определить, и вообще что захочешь

Index
17.07.2018
12:24:30
полчаса искал

A64m
17.07.2018
12:25:04
всего-то полчаса

Index
17.07.2018
12:25:43
это были страшные полчаса
лучше я еще пять ньютайпов наверну

A64m
17.07.2018
12:26:38
надо было [a] на Compose (x, [a]) менять просто
все бы продолжило работать как раньше

Index
17.07.2018
12:27:04
Compose ((,) x) [] a?

A64m
17.07.2018
12:27:27
да

kana
17.07.2018
12:28:01
tuplesection на типах работает?

Index
17.07.2018
12:28:05
Нет

shadowjack
17.07.2018
12:28:26

kana
17.07.2018
12:28:41
так а мы обсуждаем base же
вот сейчас я сделаю либу, где Num => Monoid
и буду тебе говорить, что так надо
и не важно, что не в base