Всякий раз, когда вы читаете учебные пособия 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. реализовать, и вы можете поменяться, но это то же самое? Как?