So, on the big scale, your architecture depends on what we’re calling “effects”. Meaning state, network requests, painting UIs, etc. Using an Rx architecture end2end, something like MVI, already gives most of the benefits of FP: immutable values, cross-thread operations, and streams avoid races depending on how you combine them. See the FunctionalAndroidReference project I made years ago:
https://www.pacoworks.com/2017/03/11/about-memory-management-in-fully-reactive-apps-at-droidcon-bytes-february-17/ https://www.pacoworks.com/2017/03/16/headless-development-at-mobos-librarymaking-updates-and-plans-for-2017-2/
What Arrow can give you, if you’re already using Rx like that, is a collection of APIs to work with data on the small. These are Option, Either, the extension functions for collections, and sub-libraries like Optics or serializing JSON with Helios. These help you doing transformations such as List<Observable<A>> to Observable<List<A>>, or modifying a deeply nested POJO field that’s contained in a list of POJOs of a parent type and so
https://arrow-kt.io/docs/optics/dsl/#each