Size: a a a

2021 May 27

AP

Aleksei (astynax) Pi... in Haskell
Вызывающая сторона не может решать, что нужно получать через ask
источник

AP

Aleksei (astynax) Pi... in Haskell
ask :: m r
как это тайпчекаться должно по-вашему?
откуда возмётся r?
источник

AP

Aleksei (astynax) Pi... in Haskell
Окружение строго одно, никаких разных r быть не может. Поэтому r должно выводиться само и однозначно, а не исходя из того, что вы там проаннотируете. FunDep даёт понять r по m
источник

IK

Ilya Kos in Haskell
Ну формально говорю у нас есть функциональная зависимость m -> r. Из m можно однозначно вывести r
источник

AP

Aleksei (astynax) Pi... in Haskell
Так человек и спрашивает, зачем фандеп вообще
источник

IK

Ilya Kos in Haskell
А
источник

IK

Ilya Kos in Haskell
👍
источник

IO

I O in Haskell
Не, ну иногда-то можно, например (+ 1) <$> ask чудесно бы выводился, а вот length <$> ask уже нет
источник

IK

Ilya Kos in Haskell
Проступил середину диалога 🙂
источник

IK

Ilya Kos in Haskell
(+ 1) :: Num a => a -> a
источник

IK

Ilya Kos in Haskell
Поэтому нет 🙂
источник

AP

Aleksei (astynax) Pi... in Haskell
Без фандепа каждый новый ask давал бы свой r
источник

IO

I O in Haskell
И что в этом плохого, кроме возможно не самых лучших сообщений об ошибках? Я бы с удовольствием делал ask @OneConfig, ask @AnotherConfig
источник

AV

Andrey Vlasov in Haskell
Для конкретного типа — выведется по месту использования возвращаемого значения: f :: A -> B ; ask <&> f — здесь компилятору должно всё быть понятно
Возникает неясность — ask @a
В любом случае, я понял в чём проблема, нашёл решение, всем спасибо
источник

IK

Ilya Kos in Haskell
Есть системы эффектов в которых ровно так из коробки и работает
источник

AP

Aleksei (astynax) Pi... in Haskell
Тем плохо, что аннотировать придётся любой код, даже обобщённый
источник

IK

Ilya Kos in Haskell
Ничего плохого в этом нет
источник

IK

Ilya Kos in Haskell
И при большом желании можно даже к mtl такое прикрутить
источник

IK

Ilya Kos in Haskell
Но да
источник

AP

Aleksei (astynax) Pi... in Haskell
Да берите уже любой пакет, который тегает ридеры те же
источник