Зачем использовать добрый вместо F <A> - PullRequest
2 голосов
/ 07 января 2020

Всякий раз, когда вы читаете учебные пособия Arrow.kt по мере их развития, они начинают рекламировать как преимущество FP, что вы можете абстрагировать свои типы и записывать все как вещи типа fun <F> myFun(): Kind<F, A> вместо fun myFun(): IO<A> или fun myFun(): Option<A>.

Я понимаю, что означает Kind<F, A>, но я не понимаю, почему это так полезно. Мне кажется, что включается в том, что ваша функция может возвращать Option, Either или IO без необходимости менять ваши типы, но разве это такое большое преимущество?

Я никогда не использовал FP в командных проектах или в чем-либо, содержащем сотни тысяч строк кода, поэтому, возможно, рефакторинг может быть проблематичным, и Kind<F, A> означает, что вам не нужно менять функциональные сигнатуры, просто код в блоках, я не уверен.

Может ли кто-нибудь привести мне конкретные примеры того, как это полезно на практике? Пример, где это принесло какое-то большое преимущество?

Как я могу понять, имея такой интерфейс, как Logger, и есть файловый регистратор, регистратор API-запросов, STDOUT logger и др. c. реализовать, и вы можете поменяться, но это то же самое? Как?

...