@haskellru

Страница 1550 из 1551
Abbath
27.10.2018
10:07:19
@qnikst когда ты писал deriveAeson, что это значило?

Alexander
27.10.2018
10:07:54
атоматом тот инстанс задерайвить

с правильным отображением

Abbath
27.10.2018
10:08:50
Хмм, а как?

Google
Abbath
27.10.2018
10:09:00
Я чет не силен в этой магии

Alexander
27.10.2018
10:10:33
посмотри модуль Data.Aeson.TH

но можешь и забить и руками написать

Abbath
27.10.2018
10:12:47
Там deriveJSON

Ок, понял

kana
27.10.2018
10:21:05
а есть какие-то статьи, объясняющие, почему ВХ линзы именно такие, какие они? То есть как было придумано добавить функтор? Понятно, как линзы работают, не понятно, как и почему именно так. Единственная правдоподобная интуиция звучит как "при линзе мы просто разбираем объект, а потом снова собираем, то есть она ничего не делает. Чтобы что-то делала, нужно дать возможность ей делать какой-то эффект при сборе и разборе, но так, чтобы эффект выбирался не самой линзой, а тем, кто ее использует". Собственно f - это и есть какой-то эффект, который нужен при разборе и сборе объекта линзой

A64m
27.10.2018
10:34:37
вероятно их просто открыли как существующие уже функции которые работают как линзы http://conal.net/blog/posts/semantic-editor-combinators а потом обобщили

Abbath
27.10.2018
10:44:04
@qnikst что должна функция run возвращать?

Alexander
27.10.2018
10:44:39
Value

Abbath
27.10.2018
11:12:58
Value
Короч получается

Alexander
27.10.2018
11:14:06
пользовательская функция возвращает что угодно что ToJSON

Google
Alexander
27.10.2018
11:14:12
а run - Value

Abbath
27.10.2018
11:18:22
пользовательская функция возвращает что угодно что ToJSON
Тут оказалось что кроме таска там есть еще один вариант json как его вкорячить? Функцию вызывать не надо

Alexander
27.10.2018
11:18:42
data Task = Task | Whatever

Abbath
27.10.2018
11:18:49
Хмм

Alexander
27.10.2018
11:19:10
если скажешь как они выглядят скажу как парсер сделать

но в целом как вчера писали про <|>

fromJSON = asum [ parseTask | parseWhateevr

Abbath
27.10.2018
11:21:16
Там есть еще вариант {"check" : 1234 }

Alexander
27.10.2018
11:26:53
делаешь: data Request = Task .. | Check Int

если руками парсер то: instance FromJSON Request where fromJSON x = asum [parseCheck, parseTask] where parseCheck = withObject "check" $ \o -> Check <$> (o .: "check") parseTask = ...

что-то такое

Abbath
27.10.2018
11:29:04
А сгенерить не выйдет?

A64m
27.10.2018
11:29:12
сейчас решил посмотреть первый доклад кметта по линзам, он там говорит "апи text какой-то не хаскельный, повторяются все прелюдийные функции для списков, импортировать надо квалифицированно и т.д." смеяться или плакать? не знаю

Alexander
27.10.2018
11:31:33
выйдет, но не факт что тебе шлют подходящий json

Alexander
27.10.2018
11:41:06
смотри ситуация такая

все зависит от того, что там бегает, посмотри документацию в Data.Aeson.TH

по поводу того сможешь ли подобрать опции генерации чтобы сделать тот json который от тебя ожидают

вариант сделать руками работает вообще всегда

остальные не факт

Google
Alexander
27.10.2018
11:42:30
и для парсера и для принтера

Abbath
27.10.2018
11:50:23
‘fromJSON’ is not a (visible) method of class ‘FromJSON’

kana
27.10.2018
11:57:23
parseJSON

Abbath
27.10.2018
11:59:38
• No instance for (GHC.Base.Alternative ((->) Value)) arising from a use of ‘asum’

Alexander
27.10.2018
12:05:49
я писал прямо в чат

не проверяя в ghci

Abbath
27.10.2018
12:06:04
Ок, нашел как сделать

Alexander
27.10.2018
12:06:11
asum [parseCheck x, parseTask x]

например

Abbath
27.10.2018
12:28:03
Чем сворачивают список Maybe?

Чтобы сразу Just или Nothing если есть

sequence?

kana
27.10.2018
12:31:03
Да

Aleksey
27.10.2018
14:07:41
Вот у меня есть Maybe a и a -> IO (Maybe b). И мне нужно получить IO (Maybe b)

join <$> sequence (f <$> x)

Это работает, но м.б. есть решение по-проще?

Alexander
27.10.2018
14:08:56
traverse f x ?

Aleksey
27.10.2018
14:09:44
IO (Maybe (Maybe b)) будет

Pineapple
27.10.2018
14:09:53
join <$> traverse f a

Aleksey
27.10.2018
14:10:22
Ну да, я пробовал. Всё равно join остаётся, но так короче, конечно

Google
kana
27.10.2018
14:10:30
f :: (a -> IO (Maybe b)) -> Maybe a -> IO (Maybe b) f g = maybe (pure Nothing) g

иногда лучше сделать просто матчинг

Pineapple
27.10.2018
14:11:04
А куда от джойна деться? Кто-то же должен истребить вложенный мейди

kana
27.10.2018
14:11:34
выше валидный проверенный код, никакого join

Aleksey
27.10.2018
14:11:44
f :: (a -> IO (Maybe b)) -> Maybe a -> IO (Maybe b) f g = maybe (pure Nothing) g
От такого я пытался избавиться :)

Но в целом maybe тоже ок, да

kana
27.10.2018
14:12:36
зачем, это же намного лучше кучуи join/traverse/sequence

просто кейс

Aleksey
27.10.2018
14:13:17
traverse/sequence, это норм. Вот join вместа с ними, это уже сложновато для прочтения

kana
27.10.2018
14:13:43
f :: (a -> IO (Maybe b)) -> Maybe a -> IO (Maybe b) f g = foldM (const g) Nothing но это хуже maybe тоже конечно

вот еще решение

traverse/sequence, это норм. Вот join вместа с ними, это уже сложновато для прочтения
это норм, но куда хуже примитивного кейса, тем более если он однострочный через элиминатор

ого, взгляд на arrow как на линзы конечно чет слишком крутой

Imants
27.10.2018
14:24:06
А что нужно упростить-то: описание этой ф или содержание? Можно ж сделать утилитку с простым описанием, и какая разница, что у неё внутри?

Alexander
27.10.2018
14:28:52
arrow syntax жн

kana
27.10.2018
14:40:28


хотя это настолько очевидно конечно

Alexander
27.10.2018
14:43:37
эта |> функция же в Data.Function как & определена

Google
kana
27.10.2018
14:44:35
да я знаю, проще написать определение чем импортировать

ну и еще было не слишком очевидно, что Arrow.first и Bifunctor.first (а в коде выше взаимозамеяемы вообще)

не ну если заменить на Bifunctor, то все резко становится слишком очевидно и довно известно

27.10.2018
16:05:14
Есть ли naming convention для тайпсинонимов, скрывающих типовый параметр? Например, у меня есть некое Foo a и type Bar = Foo Baz Как лучше переназвать Foo: Bar', Bar_, etc. ? Вообще какие существуют naming conventions, помимо тех, которые в https://wiki.haskell.org/Programming_guidelines#Naming_Conventions? Придумывание имён занимает слишком много времени...

Terminator
27.10.2018
16:07:44
Daniel Kogan будет жить. Поприветствуем!

David
27.10.2018
17:57:02
Что-то вроде опроса. А Cloud Haskell кто-нибудь использует в продакшине? Пакет distributed-process и все остальные. Или все ушли на REST?

Alexander
27.10.2018
17:59:02
я знаю большую фирму, которая использует

ещё adjoint используют

где Diehl

но подробностей не знаю

вообще CH так себе далеко не всегда нужно

Artyom
27.10.2018
18:00:51
это уже после недавнего фикса габриэля, где он парсер dhall в десятки раз ускорял?
Проверил, даже после фикса все плохо, k8s-конфиг из 20 строк генерил 16 секунд

Kirill
27.10.2018
18:02:19
неплохо, избегает успеха на 5+

Alexander
27.10.2018
18:04:36
у кубернетеса же типы раскидистые тоже?

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