
Alexander
26.09.2017
12:46:17
newOuter newInner это все неправильно
т.к. работает не всегда
а зачем путать себя?

? animufag ?
26.09.2017
12:46:37

Google

Alexander
26.09.2017
12:46:42
конечно
потому, что а. не путает, б. не приводит ложное описание в. не несёт неверной информации

kana
26.09.2017
12:47:17
Тебя ничего не может запутать, если ты ничего не понимаешь, think about it

? animufag ?
26.09.2017
12:47:43
неплохо

Alexander
26.09.2017
12:47:53
простота входа vs удобство для повседевного программирования?
это как с Monad m и т.п.
ещё в математику придите переобозначать переменные

? animufag ?
26.09.2017
12:48:46
главное чтобы ещё в консольке при компиляции эти аргументы типа не давали ложного представления

Alexander
26.09.2017
12:49:19
особенно весело будет когда они будут замагленные
и так читать недобно, а там они ещё и длинные будут
просто замечательно

Yuriy
26.09.2017
13:51:15
Кметт же всего лишь реализовал наброски ван Лаарховена?

Alexander
26.09.2017
13:57:03
третий человек ?

Google

Yuriy
26.09.2017
13:57:48
ваш телеграм читать невозможно, поэтому я только пишу
Контроль. Монада. Писатель.

Aleksey
26.09.2017
14:01:08
"Управление.Монада.Писатель", тогда уж

Alexander
26.09.2017
14:01:35
это правильно
те кто читают легко могут через mapMaybe прогнать
а кто не читает ничего не теряет
я думаю из 481 человека большинство не читает

Andrew
26.09.2017
14:08:42
Поставил обычный FiraCode

kana
26.09.2017
14:16:06
FiraCode это сам по себе обычный) Есть FiraMono

Leonid
26.09.2017
14:22:25
terminus master race

illiatshurotshka❄️
26.09.2017
14:25:10
а почему fmap для (,) меняет второй элемент?

Ilya
26.09.2017
14:25:52
а сколько он менять должен?

kana
26.09.2017
14:25:57
потому что так определен функтор
Functor (,) a

Ilya
26.09.2017
14:25:59
типы же разные в (a, b)

Alexander
26.09.2017
14:26:22
(a,b) <-> (,) a b

illiatshurotshka❄️
26.09.2017
14:26:27
ну а почему не первый например

Alexander
26.09.2017
14:26:29
что функтор ещё может делать?
потому что Functor (* -> *)

kana
26.09.2017
14:26:45
в хаскеле в принципе можно определить функтор только для последнего аргумента (и он обязательно должен быть, потому что интанс мы делаем не для типа, а для конструктора типа, который принимает один (!) тип и отдает другой тип (!)) (но можно использовать всякие
newtype Flip f a b = Flip { unFlip: f b a })
А для двух значений использовать N-функторы, типа бифунктора, трифунктора

Google

kana
26.09.2017
14:41:40
как мне нравятся однородный нейменг runIdentity, getConst, unFlip *sarcasm*

Aleksey
26.09.2017
14:53:56
runSmth - для монадок, get/un - для обёрток всяких (эти бы унифицировать, да). Для монадок ещё execX и evalX ещё есть помимо runX, так что пусть будут

Denis
26.09.2017
14:54:23

Aleksey
26.09.2017
14:55:01
С линзами у тебя будет _X :)
_X # x и y ^. _X - единообразненько

Denis
26.09.2017
14:56:01
ну или Data.Newtype или как его там

Ilya
26.09.2017
15:15:14
кстати, а как в хаскеле относятся к snake_case? для функций
чё-то привык уже к нему из других языков

illiatshurotshka❄️
26.09.2017
15:17:06
или даже бифунктор

Pig
26.09.2017
15:17:46

kana
26.09.2017
15:17:55
как? ((,) a b) при любом раскладе *, функтором быть не может

illiatshurotshka❄️
26.09.2017
15:18:04
ну всмысле

kana
26.09.2017
15:18:07
ты можешь заимплементить бифунктор для (,)

illiatshurotshka❄️
26.09.2017
15:18:11
что это кортеж из трех элементов

kana
26.09.2017
15:18:17
(,,) - из трех

illiatshurotshka❄️
26.09.2017
15:18:21
о
точно..

Paul
26.09.2017
15:28:18
Господа товарищи, а в Хаскелле до их пор нету тайп-лямбд, или я отстал от жизни?

kana
26.09.2017
15:29:54
до сих пор нет

Google

Paul
26.09.2017
15:30:38
спасибо. а как они это объясняют?

Андрей
26.09.2017
15:30:38
(надо было Paul Lyutko left the group) :)

Alex
26.09.2017
15:33:05
я кстати в исходной формулировке линзы и не смотрел толком, сразу читал в профункторной
оно как то интуитивнее выглядит
вообще линзы пришли из исследований по bidirectional programming насколько я помню
пресловутый Пирс этим кстати занимался

Yuriy
26.09.2017
15:46:27
(неизвестный выходит из синей будки) а Applicative уже стал суперклассом Monad?

kana
26.09.2017
15:47:01
да

Yuriy
26.09.2017
15:47:50
спасибо (неизвестный заходит в синюю будку)

Denis
26.09.2017
15:48:41
монада Тардис!)

Paul
26.09.2017
15:49:19
а вдруг комонада?

kana
26.09.2017
15:49:20
так, линзы я раздуплил, теперь траверсаблы. И как их вообще композировать с линзами

Alex
26.09.2017
16:01:16
в смысле траверсалы?

kana
26.09.2017
16:05:36
type Traversal l l' s s' = forall f. Applicative f => (s -> f s') -> (l -> f l')
хм, в кметовской либе какой-то свой Const, который еще каинд принимает. А, не, не принимает, просто полиформен по нему
Const k a (b :: k) :: forall k. * -> k -> *
Часто вижу, что в доке (hackage), часто не бывает ссылки на source какого либа определения (будь то тип, инстанс, функция)
Почему так?
Для того же Const
https://hackage.haskell.org/package/lens-4.15.4/docs/Control-Lens-Getter.html#t:Const

Pig
26.09.2017
16:13:55
Открой сорцы и посмотри, Const не там определен.

kana
26.09.2017
16:15:08
Да, я это знаю, я видел. В том же и вопрос, как он экспортирует их, как он попал в доку, если нет сорцов для этого Const?

Google

Pig
26.09.2017
16:16:11
Какая-то профессиональная haddoc-магия

Vasiliy
26.09.2017
16:47:20
самый простой пример траверсала - traverse

kana
26.09.2017
16:55:46
Да, только он чет не композируется с моими линзами
потому что view работает не с линзами, а геттерами, сейчас я пытаюсь ввести эти гетеры

Vasiliy
26.09.2017
17:00:37
нормально должен композироваться
> let view l = getConst . l Const
> view (traverse._2) [(10, "hello"), (20, " "), (30, "world")]
"hello world"
не забывай только, что то, на что оно указывает, должно быть моноидом

kana
26.09.2017
17:04:29
у меня ругается, что нет моноида для чисел (я хочу список чсел полчить)

Yuriy
26.09.2017
17:04:44

kana
26.09.2017
17:05:21
ну обычно дока все равно указывает, откуда это импортировано, не?

Vasiliy
26.09.2017
17:05:41
вот если бы ещё сообщения об ошибках в линзах можно было сделать подружелюбнее, было бы супер
линза указывает на одно значение, поэтому достаточно обычного Const, траверсал указывает на сколько угодно значений, чтоб их собрать нужен аппликатив

Denis
26.09.2017
17:08:54
это понятно)

Pig
26.09.2017
17:08:57

Denis
26.09.2017
17:08:59
кстати про зум
Lens.Zoom

Vasiliy
26.09.2017
17:09:00
Const a b - аппликатив, когда a - моноид

Denis
26.09.2017
17:09:06
кто знает про это?)