farzad
06/21/2019, 12:07 PMFunctor, Applicative and Monad. How do you explain these terms for a programmer with OOP background/terminology?farzad
06/21/2019, 12:11 PMFunctor is everything that could be mapped. By these definition we can say that all iterables are `Functor`s.pakoito
06/21/2019, 12:14 PMList.just(1) // List<Int>
Option.just(1) // Some<Int>
Sequence { yield(1) } // Sequence<Int>
Running independently means that you can have two options that don't depend on each other, and have a result only if both are Some. Or merging two lists together.
map(listA, listB) { a, b -> a to B } // List<Tuple<A, B>>
map(hasName, hasAddress) { name, address -> User(name, address) }pakoito
06/21/2019, 12:16 PMa.andThen { B(it) }pakoito
06/21/2019, 12:17 PMlist.map { listOf(it, it) } // List<List<Int>>
list.flatMap { listOf(it, it) } // List<Int>farzad
06/21/2019, 12:18 PMflatMap on it is a Monad, yeah?pakoito
06/21/2019, 12:19 PMpakoito
06/21/2019, 12:20 PMfarzad
06/21/2019, 12:23 PMFunctor and Monad. But need a simpler explanation to understand Applicative.pakoito
06/21/2019, 1:38 PMpakoito
06/21/2019, 1:38 PMpakoito
06/21/2019, 1:39 PMpakoito
06/21/2019, 1:39 PMinterface FromString<T> {
constructor T(a: String)
}pakoito
06/21/2019, 1:40 PMclass Bla(s: String): FromString<Bla>pakoito
06/21/2019, 1:40 PMpakoito
06/21/2019, 1:41 PMDerek Berner
06/21/2019, 2:13 PMApplicative generalizes Functor.map to polyadic functionsDerek Berner
06/21/2019, 2:13 PM(A) -> B into (F<A>) -> F<B>Derek Berner
06/21/2019, 2:14 PM(A,B,C,...) -> Z into (F<A>,F<B>,F<C>,...) -> F<Z>