Leonid 🦇
вечно вы всё к смехуёчкам сводите. сами то поди на кложе прод пишете
Aliester
я вообще рубист
кана
а я фронтендер на жиес
Alexander
все так, прототипируем на руби, потом переписываем на фронтенд
Кабачок
А я студент 🌚
Alexander
кроме шуток, прямо сейчас сидим и перносим логику с бэка на фронт
Aliester
тонкий сервер?
Alexander
не совсем тонкий, просто рендер переносим
Alexander
но в рендере логики побольше чем в бэке
Alexander
пасиб
кана
case мне больше нравится
Alexander
мне кажется это снепривычки
Alexander
хотя я тоже с трудом читаю
Alexander
@A64m_qb0 а аналог is есть?
A64m
не понял
Alexander
чтобы что-то типа unless (foo ^. bar . _X ....) $ Left "Bad Foo" написать
Alexander
.to (const $ True) . non False
Alexander
только чтобы человечно было
A64m
какой-то maybeToEither "error!"
A64m
не знаю, может и есть, но это думать надо
A64m
можно еще matching (bar . _X) foo & _Left .~ "Bad foo"
Alexander
хм..
Alexander
пока все ещё страшнее, но спасибо вроде понял
Alexander
более тупой вопрос есть Lens
Alexander
есть Lens M (Maybe X) есть Prism X Y как сделать из первой Lens M (Maybe Y) ?
Cheese
a . _Just . b, но получится призма, линза невозможна
Cheese
хотя...
Alexander
а как сделать линзу? у меня все во все стороны есть
Alexander
хотя может это и должна быть призма
Alexander
в общем-то это изначально 0, or 1 target
Alexander
в общем вся задача
Alexander
есть Map X Y хочу линзу/призму wtf которая работает с определенным ключем
Alexander
ну там не Map, но у него есть At класс
Alexander
at возвращает линзу, т.е. я и думал, что мне тоже линза нужна
A64m
ну из at призмы линза как раз делается non т.е. [1] ^. at 2 . non 0 или что-то вроде
Alexander
_go :: Lens' Metadata (Maybe Text) _go = at lblName
Alexander
есть такая штука, она падает с:
Alexander
• Couldn't match type ‘Text’ with ‘MetadataValue’ Expected type: (Maybe Text -> f1 (Maybe Text)) -> Metadata -> f1 Metadata Actual type: (Maybe (Control.Lens.At.IxValue Metadata) -> f1 (Maybe (Control.Lens.At.IxValue Metadata))) -> Metadata -> f1 Metadata
Alexander
есть Prism MetadataValue Text
Alexander
почему не разворачиваются семейства не знаю но там MetadataValue будет
Alexander
или я чушь пишу?
Alexander
я бы сейчас явно попытвался профунктором воспользоваться
Rigidus
Есть хаскельный проект в докере, контейнер билдится через stack. Как правильно прокинуть в него папку с конфигами? В Dockerfile я сделал бы это через COPY, а как сделать это в stack?
Alexander
_go :: Lens' Metadata (Maybe Text) _go = at lblName . lmap _foo . rmap _bar _foo :: Maybe MetadataValue -> Maybe Text _foo x = join $ fmap (^? _ValueText) x _bar :: Functor f => f (Maybe Text) -> f (Maybe MetadataValue) _bar = fmap (fmap (\y -> y ^. re _ValueText))
Alexander
@cblp_su @A64m_qb0 как из этого человеческое что-то сделать?
Alexander
по типам сходится, по смыслу тоже
Alexander
далее ещё вопрос, есть Metadata, At => Metadata каким комбинатором по ключу получить и убрать значение из Metadata?
Alexander
: (
A64m
чего-то я сходу не разобрался, это надо в репле с чем-то работающим поэкспериментировать
Alexander
newtype Metadata = Metadata (Map Text MetadataValue) data MetadataValue = MetadataInt Int | MetadataText Text
Alexander
это упрощенные до достаточные для воспроизведения типы из пасты выше
Alexander
могу и компиляющийся пример наверное
Alexander
хочу lens normalizer
Alexander
которому даешь линзу, а он её в каноническую форму приводит
Leonid 🦇
@s9gf4ult https://bitbucket.org/s9gf4ult/postgresql-query/issues/2/fails-to-build-with-either-5 Ну Семён Семёныч
Alexander
линзами только с тайпчеккером можно пользоваться
Rigidus
запустило в интерактиве а там ничего
Alexander
хотя тайпчекер не всегда помогает
Denis
без тайпчекера вообще неюзабельно
Alexander
@A64m_qb0 ещё помощь нужна
Alexander
name = gen ^. nameL . to(Right . RefName) . non(Left "Name not present") nameL линза в Maybe Text
Alexander
тут точно to надо, чтобы применилось для just только?
A64m
а там на выходе-то перед non Maybe будет?
A64m
я бы вообще не советовал все эти линзы с мейбями использовать, а лучше призмы - траверсалы
Andrei
не примонтировалось
если не монтируется, значит где-то бага. баги надо репортать.
Alexander
то не взлетело, пробую ещё раз
Alexander
а не это я дурак
A64m
newtype Metadata = Metadata (Map Text MetadataValue) data MetadataValue = MetadataInt Int | MetadataText Text
ну смотря что с этим делать, для мапа есть траверсал ix, ну или из at можно призму сделать, скомбинировав at "foo" . _Just
A64m
и призмы _MetadataInt и _MetadataText
A64m
там что с этим всем делать-то надо?
Alexander
а. сделать линзу/траверсал wtf, который позволяет записать/прочитать определенный ключ из Map
Alexander
name :: Either Text Text$ name = gen ^? nameL . to(Right) ^. non(Left "Name not present") Couldn't match type ‘Text’ with ‘Maybe Text’
A64m
для ньютайп обертки Iso же сгенерировано?