A64m
а про то что эта функция использует какой-то там опасный мутирующий инсерт
A64m
который, ясное дело, быстрее
Alexander
т.е. у меня fromList <$> stream vs fold_ HM.insert
Alexander
а т.е. поидее если тот insert в API то я могу его использовать поидее?
A64m
наверное
Alexander
ну да.. кто ж такие вещи в API выставляет :/
Alexander
ладно сделаю через fold
Влод
ну тип второе поведение меня бы не так запутало, но нужно было именно первое
Влод
ну да не очень оформлен пример string "1" <++> ((string "2"" <++> string "3") <|> string "4") парсит (и возвращает как результат) 123 14 не парсит 124
Alexander
+
Влод
что?))
Alexander
понял
Alexander
aka да, aka согласен и т.п.
Alexander
Описал свою фримонадную STM. Статью не перечитывал, могут быть баги. https://habrahabr.ru/post/350628/
Дима
Интересно
Alexander
@graninas retry используется для блокировки в stm
Alexander
используется ~ значит
Alexander
отмена это throwSTM
Alexander
но это мелочи
Alexander
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
Зигохистоморфный
ага
Зигохистоморфный
нет фантома
Alexander
Гм
Alexander
нет, все типы справа одинаковые
Alexander
Окай
Alexander
STMF next
Alexander
если бы был какой-то скажем STMF ()
Alexander
был бы GADT
Alexander
Хм, хм
Alexander
т.е. data STMF next = NewTVar a (TVar a -> next) | WriteTVar (TVar a) a next | ReadTVar (TVar a) (a -> next)
Alexander
это абсолютно тоже самое
кана
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
ну да, так более верно
кана
или a сам форалится?
Alexander
@kana_sama ты прав, нужно forall a + ExistentialQuantification писать
кана
как запомнить ExistentialQuantification? пишу часто, но каждый раз ExistentionalQuantification
Alexander
не знаю
кана
так-то в принципе любой gadt можно заменить на adt
Alexander
написать 39 раз
Alexander
нет
кана
даже твой с ()
кана
достаточно подключить семейства
кана
чтобы ~ получить
Alexander
data SImple a where Unit :: a -> Simple () Number :: a -> Simple Int
Alexander
это уже и будет GADT
Alexander
вид в профиль
кана
тем не менее синтаксис будет адтовый так-то по моему с exist такая же ситуация
Alexander
вообще GADT это как раз про возможность того, что конструкторы типа могут делать разные типы
Alexander
тут они все возвращают один и тот же тип
Alexander
Я отредактировал, уж ладно.
Alexander
ну это мелочи
Alexander
я потому это здесь и пишу, а не там
Alexander
вообще хабр смешной, вроде в послдених моих статьях было 0 комментариев
Alexander
а когда я на поинте что-то по теме спросил, мне сказали почитай на хабре там кто-то статью по теме с каким-то адом написал..
кана
в stm же никаких io, верно?
Aliester
что-то на хабре слишком много трактор-стори стало последее время
Alexander
в stm же никаких io, верно?
Да, иначе будет непонятно что при перезапуске транзакции
кана
мне так однажды кинули ссылку на мою же статью про трансдьюсеры
кана
я уже этот вопрос задавал на фбае похоже
кана
в прошлом фрилансил на ней
Alexander
ну конечно unsafePrimToPrim можно
кана
но статья про жиес
Alexander
unsafeIOToSTM тоже
Alexander
но нужно понимать, что а. этот поток может быть прерван в любой момент
Alexander
б. IO может быть вызвано 100500 раз
Aliester
ага
Dmitry
Да всегда ж так было.
кана
@graninas ты бы условие задачи вставил
Dmitry
Не помню обратного
кана
а то я хз например что за философы, пойду гуглить
Aliester
задача парикмахера тоже интересна