Skip to content

Instantly share code, notes, and snippets.

View JorgeCastilloPrz's full-sized avatar
🎉
Mostly Android stuff now, also FP

Jorge Castillo JorgeCastilloPrz

🎉
Mostly Android stuff now, also FP
View GitHub Profile
@JorgeCastilloPrz
JorgeCastilloPrz / PolymorphicIOTest.kt
Created July 31, 2018 11:04
PolymorphicIOTest.kt
object test {
@JvmStatic
fun main(args: Array<String>): Unit {
val user1 = User(UserId("user1"))
val user2 = User(UserId("user2"))
val user3 = User(UserId("unknown user"))
val ioModule = Module(IO.async())
ioModule.run {
@JorgeCastilloPrz
JorgeCastilloPrz / PolymorphicDeferredTest.kt
Created July 31, 2018 11:00
PolymorphicDeferredTest.kt
object test {
@JvmStatic
fun main(args: Array<String>): Unit {
val user1 = User(UserId("user1"))
val user2 = User(UserId("user2"))
val user3 = User(UserId("unknown user"))
val deferredModule = Module(DeferredK.async())
deferredModule.run {
@JorgeCastilloPrz
JorgeCastilloPrz / PolymorphicObservableFlowableTest.kt
Created July 31, 2018 10:57
PolymorphicObservableFlowableTest.kt
object test {
@JvmStatic
fun main(args: Array<String>): Unit {
val user1 = User(UserId("user1"))
val user2 = User(UserId("user2"))
val user3 = User(UserId("unknown user"))
val observableModule = Module(ObservableK.async())
observableModule.run {
@JorgeCastilloPrz
JorgeCastilloPrz / MaybeRuntimeTest.kt
Created July 31, 2018 10:56
MaybeRuntimeTest.kt
@JvmStatic
fun main(args: Array<String>): Unit {
val user1 = User(UserId("user1"))
val user2 = User(UserId("user2"))
val user3 = User(UserId("unknown user"))
val maybeModule = Module(MaybeK.async())
maybeModule.run {
repository.allTasksByUser(user1).fix().maybe.subscribe({ println(it) }, { println(it) })
repository.allTasksByUser(user2).fix().maybe.subscribe({ println(it) }, { println(it) })
@JorgeCastilloPrz
JorgeCastilloPrz / PolymorphicModuleF.kt
Created July 31, 2018 10:48
PolymorphicModuleF.kt
class Module<F>(A: Async<F>) {
private val localDataSource: LocalDataSource<F> = LocalDataSource(A)
private val remoteDataSource: RemoteDataSource<F> = RemoteDataSource(A)
val repository: TaskRepository<F> =
TaskRepository(localDataSource, remoteDataSource, A)
}
@JorgeCastilloPrz
JorgeCastilloPrz / RuntimeSingleTest.kt
Last active July 31, 2018 10:46
RuntimeSingleTest.kt
object test {
@JvmStatic
fun main(args: Array<String>): Unit {
val user1 = User(UserId("user1"))
val user2 = User(UserId("user2"))
val user3 = User(UserId("unknown user"))
val singleModule = Module(SingleK.async())
@JorgeCastilloPrz
JorgeCastilloPrz / PolymorphicFunctionallTasksByUser.kt
Created July 31, 2018 10:37
PolymorphicFunctionallTasksByUser.kt
fun allTasksByUser(user: User): Kind<F, List<Task>> =
localDS.allTasksByUser(user).handleErrorWith {
when (it) {
is UserNotInLocalStorage -> remoteDS.allTasksByUser(user)
else -> raiseError(UnknownError(it))
}
}
@JorgeCastilloPrz
JorgeCastilloPrz / PolymorphicTaskRepository.kt
Created July 31, 2018 10:34
PolymorphicTaskRepository.kt
class TaskRepository<F>(
private val localDS: DataSource<F>,
private val remoteDS: RemoteDataSource<F>,
AE: ApplicativeError<F, Throwable>) : ApplicativeError<F, Throwable> by AE {
fun allTasksByUser(user: User): Kind<F, List<Task>> =
localDS.allTasksByUser(user).handleErrorWith {
when (it) {
is UserNotInLocalStorage -> remoteDS.allTasksByUser(user)
else -> raiseError(UnknownError(it))
@JorgeCastilloPrz
JorgeCastilloPrz / LocalDataSourceDeclaration.kt
Created July 30, 2018 18:18
LocalDataSourceDeclaration.kt
class LocalDataSource<F>(A: ApplicativeError<F, Throwable>) :
DataSource<F>, ApplicativeError<F, Throwable> by A {
override fun allTasksByUser(user: User): Kind<F, List<Task>> =
Option.fromNullable(localCache[user]).fold(
{ raiseError(UserNotInLocalStorage(user)) },
{ just(it) }
)