Functional Programing Android architecture approaches using Arrow.
Since the project uses the News API you will need to add newsApiKey=your_news_api_key
to
your home gradle.properties
to be able to compile and run it. You can also add them by command line:
./gradlew detektCheck build -PnewsApiKey="\"whatever\""
This project uses the so called Tagless-Final
Functional Programming style. Tagless-Final is focused on never depending on concrete data types like Option or Try, but make the program depend on an unknown F
type end to end instead. Then we use Type Class constraints (behaviors) that work over that F
to encode our programs, leaving the decision about which concrete type to use (or in other words: what type fix F
to) to the moment when we are ready to run the code, or in other words, the "Runtime".
Once you're at the "edge of the world" to run your program, you'll pass a proper runtime. In this sample we are fixing the F
type that the program remains agnostic of to be IO
. But it could actually be any type that supports asynchrony and concurrency, since those are the only constraints we have for this program.
The library being used here to fetch super newsItems is the MarvelApiClientAndroid from Karumi.
- Jorge Castillo Pérez - jorge.castillo.prz@gmail.com
![Twitter profile](https://github.com/JorgeCastilloPrz/KotlinAndroidFunctional/raw/master/assets/twitter_logo.png?raw=true)
For more Functional Programming content applied to Android you can have a look at my blog 👍
Copyright 2019 Jorge Castillo Pérez
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.