Lucas Santos
Adicionando comportamentos em OO
Adicionando comportamentos em linguagens funcionais
f : X → Y
g : Y → Z
g(f(x))
g ∘ f : X → Z
Manter contexto na composição das funções
Empacotando retornos de função
M<T>.flatMap((T → M<U>)) == (T → M<U>).apply(T)
M<T>.flatMap(unit) == M<T>
M<T>.flatMap(F).flatMap(G)
==M<T>.flatMap(((X) → F(X).flatMap(G))
//type constructor
public static <T> Optional<T> of(T value);
//bind
public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper);