
A64m
27.03.2018
11:57:57
наверное

? animufag ?
27.03.2018
11:58:31

Alexander
27.03.2018
11:58:35
ну да.. кто ж такие вещи в API выставляет :/
ладно сделаю через fold

Google

? animufag ?
27.03.2018
11:58:58
ну тип второе поведение меня бы не так запутало, но нужно было именно первое

Alexander
27.03.2018
12:03:55

? animufag ?
27.03.2018
12:06:44
ну да не очень оформлен пример
string "1" <++> ((string "2"" <++> string "3") <|> string "4")
парсит (и возвращает как результат)
123
14
не парсит
124

Alexander
27.03.2018
12:09:22
+

? animufag ?
27.03.2018
12:11:01
что?))

Alexander
27.03.2018
12:11:39
понял
aka да, aka согласен и т.п.

Александр
27.03.2018
12:59:31
Описал свою фримонадную STM. Статью не перечитывал, могут быть баги.
https://habrahabr.ru/post/350628/

Дмитрий
27.03.2018
13:00:33
Интересно

Alexander
27.03.2018
13:18:50
@graninas retry используется для блокировки в stm
используется ~ значит
отмена это throwSTM
но это мелочи

Google

Alexander
27.03.2018
13:22:12
data STMF next where
NewTVar :: a -> (TVar a -> next) -> STMF next
WriteTVar :: TVar a -> a -> next -> STMF next
ReadTVar :: TVar a -> (a -> next) -> STMF next
это не GADT это ADT

Denis
27.03.2018
13:22:27
ага
нет фантома

Александр
27.03.2018
13:22:42
Гм

Alexander
27.03.2018
13:22:43
нет, все типы справа одинаковые

Александр
27.03.2018
13:22:44
Окай

Alexander
27.03.2018
13:22:48
STMF next
если бы был какой-то скажем STMF ()
был бы GADT

Александр
27.03.2018
13:23:30
Хм, хм

Alexander
27.03.2018
13:24:01
т.е.
data STMF next
= NewTVar a (TVar a -> next)
| WriteTVar (TVar a) a next
| ReadTVar (TVar a) (a -> next)
это абсолютно тоже самое

kana
27.03.2018
13:24:16
data STMF next
= forall a. NewTVar a (TVar a -> next)
| forall a. WriteTVar (TVar a) a next
| forall a. ReadTVar (TVar a) (a -> next)

Alexander
27.03.2018
13:24:38
ну да, так более верно

kana
27.03.2018
13:24:43
или a сам форалится?

Alexander
27.03.2018
13:26:01
@kana_sama ты прав, нужно forall a + ExistentialQuantification писать

kana
27.03.2018
13:26:40
как запомнить ExistentialQuantification?
пишу часто, но каждый раз ExistentionalQuantification

Alexander
27.03.2018
13:27:22
не знаю

kana
27.03.2018
13:27:26
так-то в принципе любой gadt можно заменить на adt

Alexander
27.03.2018
13:27:26
написать 39 раз

Google

Alexander
27.03.2018
13:27:31
нет

kana
27.03.2018
13:27:40
даже твой с ()
достаточно подключить семейства
чтобы ~ получить

Alexander
27.03.2018
13:27:59
data SImple a where
Unit :: a -> Simple ()
Number :: a -> Simple Int
это уже и будет GADT
вид в профиль

kana
27.03.2018
13:28:26
тем не менее синтаксис будет адтовый
так-то по моему с exist такая же ситуация

Alexander
27.03.2018
13:29:43
вообще GADT это как раз про возможность того, что конструкторы типа могут делать разные типы
тут они все возвращают один и тот же тип

Александр
27.03.2018
13:31:10
Я отредактировал, уж ладно.

Alexander
27.03.2018
13:32:06
ну это мелочи
я потому это здесь и пишу, а не там
вообще хабр смешной, вроде в послдених моих статьях было 0 комментариев
а когда я на поинте что-то по теме спросил, мне сказали почитай на хабре там кто-то статью по теме с каким-то адом написал..

kana
27.03.2018
13:33:10
в stm же никаких io, верно?

Alister
27.03.2018
13:33:47
что-то на хабре слишком много трактор-стори стало последее время

Alexander
27.03.2018
13:33:55

Google

Александр
27.03.2018
13:34:01

kana
27.03.2018
13:34:03
мне так однажды кинули ссылку на мою же статью про трансдьюсеры
я уже этот вопрос задавал на фбае похоже

Alister
27.03.2018
13:34:32

kana
27.03.2018
13:34:45
в прошлом фрилансил на ней

Alexander
27.03.2018
13:34:48
ну конечно unsafePrimToPrim можно

kana
27.03.2018
13:34:51
но статья про жиес

Alexander
27.03.2018
13:35:25
unsafeIOToSTM тоже
но нужно понимать, что а. этот поток может быть прерван в любой момент
б. IO может быть вызвано 100500 раз

Dmitry
27.03.2018
13:44:53

Alister
27.03.2018
13:45:02
ага

Dmitry
27.03.2018
13:45:27
Да всегда ж так было.

kana
27.03.2018
13:45:33
@graninas ты бы условие задачи вставил

Dmitry
27.03.2018
13:45:36
Не помню обратного

kana
27.03.2018
13:45:48
а то я хз например что за философы, пойду гуглить

Dmitry
27.03.2018
13:46:09

Alister
27.03.2018
13:46:25
задача парикмахера тоже интересна

Dmitry
27.03.2018
13:46:28
@graninas А где в книге про фримонады? Вообще, где про это почитать внятно?

Google

Александр
27.03.2018
13:47:59

Dmitry
27.03.2018
13:48:10
Жду :)

Александр
27.03.2018
13:48:53
Жду :)
http://www.haskellforall.com/2012/06/you-could-have-invented-free-monads.html
А что никто не плюсует? Покритиковали, и все? Нет уж, извольте теперь жениться!

Alexander
27.03.2018
14:03:55
я плюсанул
и лайк в свитере поставил

Anatolii
27.03.2018
14:05:08
какие-то фри монады, а на FreeHashMap можно это сделать?

kana
27.03.2018
14:07:26
"К сожалению, я разбираюсь во внутренностях даже хаскельной библиотеки stm, не говоря уж о прочих экосистемах."
мне бы о таком сожалеть
@graninas

Александр
27.03.2018
14:08:44

Andrii
27.03.2018
14:09:04
а подскажите есть где то пример работы с gRPC на Haskell. пока только ети нашол https://github.com/awakesecurity/gRPC-haskell/tree/master/examples/
может статья какая то.

Александр
27.03.2018
14:09:12

Alexander
27.03.2018
14:09:31
@graninas "не" пропущено

kana
27.03.2018
14:09:43
или там опечатка, или знание о stm ломает твою жизнь

Alexander
27.03.2018
14:09:55
+

Александр
27.03.2018
14:11:54
Чорд, моя невнимательность. Исправил

kana
27.03.2018
14:14:08
@graninas ты, кстати, не думал о переходе на freer? Вот там действительно gadt описывается (а так же лучше перфоманс и не нужен инстанс функтора)
мб у freer есть какие-то недостатки?

Александр
27.03.2018
14:15:12
Про недостатки не скажу, плоховато еще разобрался