@haskellru

Страница 715 из 1551
Aleksey
28.12.2017
08:25:56
Источник местами некорректен, но зато охват широкий. А корректность можно подтянуть

A
28.12.2017
08:27:08
включил MultiParamTypeClasses и потом ещё FunctionalDependencies

Aleksey
28.12.2017
08:27:31
А когда будешь объявлять инстанс, то ещё потребуется и FlexibleInstances :)

Google
A
28.12.2017
08:27:35
короче, кажется это можно воспринимать как необязательную магию

GNU/Maybe
28.12.2017
08:27:54
Рано или поздно понадобится

Aleksey
28.12.2017
08:27:57
Что "это"?

Эти конкретные расширения - must have практически

A
28.12.2017
08:28:21
MonadName a | a -> b

Aleksey
28.12.2017
08:28:51
Такой подход очень популярен нынче (т.н. "mtl-style тайпклассы"), так что это не "необязательная" магия

фандепы - не слишком сложная штука, польза от мультипараметровые тайпклассы тоже сразу понятна :)

Вот всякие FlexibleInstances в первое время включаешь, когда компилятор попросит - это можно считать "магией". Благо компилятор тут достаточно лаконичен в плане сообщений

kana
28.12.2017
08:34:45
для конкретного m может быть только один парный e, да
То есть я правильно понимаю, что это значит, что где-то внутри индексов m обязательно должен быть e? Магией я это считаю из-за того, что мы не указываем явно "где", мы указываем "где-то тут в типе"

Aleksey
28.12.2017
08:35:32
Да, либо ты должен указать конкретный тип

instance MonadError () Maybe where такое должно сойти тоже

Aleksey
28.12.2017
08:42:54
instance MonadError () Maybe where такое должно сойти тоже
instance MonadError () Maybe where throwError () = Nothing catchError Nothing f = f () catchError x _ = x > catchError (do { throwError (); Just 1 }) (const $ Just 42) Just 42

Google
kana
28.12.2017
08:44:01
можно это как ассоциированный тип себе представлять type Fundep String = Char и т.д.
Хм, ну так легко, да. Там Char, потому что [Char], а какой type FD Bool = Char бы уже не вышел, верно?

A64m
28.12.2017
08:44:27
почему?

все бы нормально было

Aleksey
28.12.2017
08:44:42
Не вышло бы FD String = Int

а FD () = Char - ок

Направление стрелки в фундепе не просто так есть

A64m
28.12.2017
08:45:42
тут не нужны контейнерные ассоциации

может быть пример, если у нас первое слагаемое дабл то и результат операции дабл например ит.д.

kana
28.12.2017
08:48:46
Хм, ну таки да, Bool -> Char вполне работает

Это все таки намного проще рассматривать как ассоциированный тип

Чем какую-то магию по поиску типа внутри типа

Наконец-то я понял фандепы

Aleksey
28.12.2017
08:50:23
С просветлением!

(/me так говорит, будто сам всё понимает)

Интуиция для фандепов неплохо развивается, если попробовать реализовать mtl с нуля.

kana
28.12.2017
08:54:25
все таки имхо синтаксис для них не самый удачный, потому что синтаксически выглядит как будто для класса "* -> * -> Constraint" мы получаем Type*Type всех комбинаций, а на определении "a b" и "a c" уже ругается, что понятно после понимаю фандепов, но синтаксически неочевидно Да и не нужно лишний раз указывать второй тип, он же все равно однозначно выводится из первого

через семейства явно лучше

Aleksey
28.12.2017
08:54:56
Это вкусовщина

Alexander
28.12.2017
08:56:13
учитывая что семейства строго слабее

даже type families dependencies

Google
Alexander
28.12.2017
08:56:33
у которых такой же синтаксис

но они ещё и не доделаны

A64m
28.12.2017
08:57:36
можно еще http://www.cse.chalmers.se/~hallgren/Papers/Hallgren01.pdf почитать, там более общая интуиция вырабатывается, оттуда и понятно почему у них такой синтаксис

Aleksey
28.12.2017
08:57:44
даже type families dependencies
это которые ~>?

A64m
28.12.2017
08:58:00
Vitaly
28.12.2017
08:58:11
но они ещё и не доделаны
Это можно вообще про всё писать в GHC

Alexander
28.12.2017
08:58:21
которые type family Foo a b | b -> a

Aleksey
28.12.2017
08:58:27
А! Ок

A64m
28.12.2017
08:58:33
да, фундепы тоже недоделаны

просто их уже давно и не доделывают

Alexander
28.12.2017
08:58:53
ну там совсем не доделаны

только 1 к 1 переменными связь

Vitaly
28.12.2017
08:59:06
Но выкинуть боятся

Alexander
28.12.2017
08:59:14
а заменить то нечем

A64m
28.12.2017
08:59:16
но тут-то под недоделанностью подразумеывается, что первоначальный план/пропозал не имплементирован полностью

как первоначальные семейства до 7,2

Leonid
28.12.2017
09:03:14
ухты, я по статсам на 3м месте! Правда @qnikst и @A64m_qb0 никто не догонит.

@qnikst ты как-то говорил что зачал новый "сервис" с апишечкой в стиле http-rpc. оно у тебя на серванте?

Alexander
28.12.2017
09:55:31
уже да

Leonid
28.12.2017
09:56:06
ты стал мутить свой комбинатор для типа ошибок, или забил?

Google
Alexander
28.12.2017
09:58:57
забил пока

Leonid
28.12.2017
10:06:19
я вообще не уверен что хочу с сервантом заморочится

слишком он тайп левел

ошибки на 25 экранов. компиляшка медленная.

/me мучается

Alexander
28.12.2017
10:08:25
я когда начал ErrorT переизобретать и автосбор-разбор сообщений

и захотел сваггер, то решил взять сервант

учитывая что это все надо было "завтра"

Admin
ERROR: S client not available

Leonid
28.12.2017
10:09:03
вот сваггер это пока единственное что хотелось бы

и то не факт.

Kirill
28.12.2017
10:15:35
ошибки на 25 экранов. компиляшка медленная.
Есть servant-named и ещё какой-то вариант на рекордах - всё не дотягиваюсь поковырять до конца

Denis
28.12.2017
10:49:00
внезапно https://github.com/haskell-servant/servant-js

Leonid
28.12.2017
10:54:41
да этого добра много

Vyacheslav
28.12.2017
10:56:41
да чтож такое

как не зайдешь сюда обсуждают js

illiatshurotshka❄️
28.12.2017
10:57:21
Denis
28.12.2017
10:57:35
я такое еще для котлин нашел

https://hackage.haskell.org/package/servant-kotlin

Google
illiatshurotshka❄️
28.12.2017
10:58:18
так суть серванта в том что такие штуки просто делать

Kirill
28.12.2017
10:58:36
Даёшь servant-whitespace!

Denis
28.12.2017
10:59:19
кстати у пурсы тоже есть тайплевел https://github.com/owickstrom/hyper

A64m
28.12.2017
11:00:23
посмотрел доклад про этот ваш котлин, потрясающее убожество делают, конечно. Сделали опять C# (ну не совсем, противонуллострадания там все еще никак недоделают) через 10+ лет, ну, хорошо что не Го.

Leonid
28.12.2017
11:01:25
@A64m_qb0 измученные явой андройдописцы радуются

Andrei
28.12.2017
11:01:39
на F(by) 2016 был доклад про ФП на Kotlin. Это всё, что надо знать о.

Alister
28.12.2017
11:02:14
писали новый Смолтолк а получился как всегда C#

illiatshurotshka❄️
28.12.2017
11:03:07
A64m
28.12.2017
11:03:24
какой там смолток еще?

@A64m_qb0 измученные явой андройдописцы радуются
ну так C# же, т.е. жава с немного уменьшенными страданиями

ты бываешь вообще чем-то довольный?)
конечно. вот, например: > хорошо что не Го

Denis
28.12.2017
11:06:03
зачем Крис Мартин придумал PartialSemigroup? https://hackage.haskell.org/package/partial-semigroup-0.0.0.1

Aleksey
28.12.2017
11:06:36
> A partial semigroup is like a semigroup, but the operator is partial.

чтобы жизнь малиной не казалась :)

illiatshurotshka❄️
28.12.2017
11:07:40
получается что что угодно образует partial semigroup ?

Oleg
28.12.2017
11:07:42
К примеру, суммы/ произведения интов с учётом переполнения

Для чего угодно и просто semigroup можно определить

Через First или Last

Denis
28.12.2017
11:09:17
PartialMonoid PartialFunctor PartialApplicative PartialMonad PartialBifunctor PartialArrow :D

Aleksey
28.12.2017
11:10:09
Они такие и есть же

Страница 715 из 1551