Denis
26.10.2018
17:48:01
а вообще я такое еще нашел
https://www.stackage.org/haddock/lts-12.14/base-4.11.1.0/Data-Semigroup.html#t:ArgMin
Alexander
26.10.2018
17:48:08
не важно, главное тайпчекнулось
Andrei
26.10.2018
18:01:21
Ну там типа
* общение с Redis, Cassandra (с самописными либами), SES, SQS, S3, Twilio, миграции всякие, патчинг амазонки
* микросервисы и общение между ними
* тестирование всего бекенда локально
* деплоймент, КУБЕРНЕТЫС, возможно погрущу о том, что dhall<->kubernetes пока что невозможно иметь
* монадки всякие, MonadUnliftIO, ReaderT IO повсюду, двадцать типов "Env" в разных местах
* Блин, пока писал, понял, что какая-то мешанина, да и непонятно, как её в жизни применять
Мб лучше я расскажу, как Сервант использовать нормально, а не методом карго-культинга? ?
хочу
A64m
26.10.2018
18:02:05
вообще, то что в base есть NonEmpty, а Foldable1 нету - это идиотизм
Google
Alexander
26.10.2018
18:03:34
Foldable1 это как другие 1, типа Show1 ?
Terminator
26.10.2018
18:05:08
Mr. W будет жить. Поприветствуем!
Denis
26.10.2018
18:06:42
getOption . foldMap (Option . Just . Min) $ [1..10]
https://www.stackage.org/haddock/lts-12.14/base-4.11.1.0/Data-Semigroup.html#t:Option
Ideally, this type would not exist at all and we would just fix the Monoid instance of Maybe
A64m
26.10.2018
18:07:05
так-то это minimumOf (traverse . traverse) просто
Denis
26.10.2018
18:09:39
c линзами вообще хватит minimumOf traverse [1..10]
A64m
26.10.2018
18:13:32
если через коэрс имплементировать то
foo :: forall a. Ord a => [Maybe a] -> Maybe a
foo = coerce (mconcat :: [Option (Min a)] -> Option (Min a))
Alexander
26.10.2018
18:17:23
т.е. fold @@ (Option Min)
A64m
26.10.2018
18:18:55
fold @@ (Option . Min)
Alexander
26.10.2018
18:19:40
да
Google
Alexander
26.10.2018
18:20:01
или Compose Option Min
если не поддерживать свой парсер внутри ( )
A64m
26.10.2018
18:20:56
а не надо свой парсер
имеется в виде просто композиция конструкторов
Alexander
26.10.2018
18:21:20
а
да так кстати даже круче
A64m
26.10.2018
18:21:46
но это более сложная фича, чем та где конструктор типа указывается
Alexander
26.10.2018
18:21:48
чего-то я все думал, что там на уровне типов штука
A64m
26.10.2018
18:21:49
конечно
там конструкторы только чтоб тип получить, они в рантайме то не выполняются
Alexander
26.10.2018
18:28:12
естественно
A64m
26.10.2018
18:28:26
эту фичу, в принципе, можно до любого Iso расширить, если допустить рантаймовые расходы
Alexander
26.10.2018
18:28:35
а почему так сложнее, если с плагином?
и Rep a ~ Rep b
A64m
26.10.2018
18:29:02
ну, в смысле репорта ошибок сложнее
программист может написать любую функцию и что-то ожидать от этого
плохого ничего не будет что не надо не скстится
но непонятно
Alexander
26.10.2018
18:29:56
а
A64m
26.10.2018
18:30:20
с указанием конструкторов типов-то особо не развернуться
Google
Alexander
26.10.2018
18:31:34
обманутые ожидание это опасно
как с лин типами может быть
тут правда фича не такая пафосная
Denis
26.10.2018
18:33:08
по виду это же меньше
getOption . foldMap (Option . fmap Min) $ [Just 7, Just 2]
Alexander
26.10.2018
18:33:28
ну у меня сработало и выдало 1
A64m
26.10.2018
18:33:39
я когда эту фичу придумывал, сначал предполагал конструирование типа именно кодом, который не выполняется, но позволяет схему типа получить т.е. вариант с сортировкой был sort @@ map Down но птом решил, что с автоматикой вместо гибкости лучше будет
Alexander
26.10.2018
18:34:08
coerce слишком полиморфная поэтому нужно лишнее писать
A64m
26.10.2018
18:34:37
foo :: forall a. Ord a => [Maybe a] -> Maybe a
foo = coerce (mconcat @(Option (Min a)))
Alexander
26.10.2018
18:34:39
кстати можно писать и меньше, я многобуков написал чтобы точно работало
а фолду ещё бы пришлось функтор задавать через @ _
A64m
26.10.2018
18:35:51
ну или
foo :: forall a. (Foldable f, Ord a) => f (Maybe a) -> Maybe a
foo = coerce (fold @(Option (Min a)))
Denis
26.10.2018
18:35:56
Kirill
26.10.2018
19:22:56
@lightgreen залез тут на страничку "друзей Rust" и там помимо Galois ещё и Wire?
Artyom
26.10.2018
19:23:08
А что за страничка?
У нас на расте крипта написана и протокол весь
И воркшопы проводятся каждые N месяцев
И клиент даже есть lightweight на расте, но он умер
Google
Kirill
26.10.2018
19:25:33
да https://www.rust-lang.org/en-US/friends.html про протокол написано, да
так-то это, конечно, offtop
Alexander
26.10.2018
19:32:19
@a66ath получилось все?
Abbath
26.10.2018
19:32:43
Alexander
26.10.2018
19:33:06
в черногории же уже холодно?
Abbath
26.10.2018
19:33:14
Я не там
Alexander
26.10.2018
19:33:48
ты же сказал что в Баре
Abbath
26.10.2018
19:34:33
Лол
В пабе
Пиво употребляю
Ловлю пик Балмера
Alexander
26.10.2018
19:38:10
/me не шарит
kana
26.10.2018
20:20:57
а если линзы, которые кастят изоморфные типы?
Artyom
26.10.2018
20:21:08
Iso?
Control.Lens.Iso
kana
26.10.2018
20:21:34
типа берут Rep от генерика, выкидывают весь мусор, приводят к нормальной форме с какой-нибудь сортировкой, а потом кастят
Artyom
26.10.2018
20:23:44
generic-lens тогда мб
Ну то есть у них такое может быть имплементировано, но я не уверен
A64m
26.10.2018
20:34:53
kana
26.10.2018
20:35:41
конвертируют, потому что порядок элементов суммы может не совпадать, главное чтобы мощности типов были одинаковы
не обязательно даже общий случай, хотя бы простенькие нерекурсивные типы
A64m
26.10.2018
20:37:11
ну упомянутые generic-lens конвертируют с сабтайпингом даже
Google
A64m
26.10.2018
20:37:43
т.е. рекорд с большим числом полей можно конвертировать в рекорд с меньшим
kana
26.10.2018
20:38:03
а как они при этом решают проблему, когда изоморфизмов несколько
например (Int, Int) в { a :: Int, b :: Int }
ну наверное просто подряд идут, изучу
A64m
26.10.2018
20:38:57
по порядку полей, наверное
ну да
> injectSub (Foo 1 2) :: (Int, Int)
(1,2)
Dmitry
27.10.2018
05:19:21
https://dmkpress.com/catalog/computer/programming/functional/978-5-97060-694-0/
Брать?
"По мнению пионера программного обеспечения Алана Кея, смена парадигмы может дать 80 баллов IQ"
(надеюсь, 80 баллов прироста)
Vitaly
27.10.2018
05:25:59
Брать
Alexander
27.10.2018
06:33:08
сначала английскую, потом эту
Aleksey
27.10.2018
06:58:52
Английская сильно дороже. А тут в бумаге за 800р. Даже если перевод где-то споткнётся
ДМК всё же стараются, чтобы книги получались дешёвыми. И им пока удаётся
Igor
27.10.2018
08:18:21
Dmitry
27.10.2018
08:40:29
Мне обычно так доставляют
Но они отзывчивые
Предлагаю с ними связаться и уточнить