scala functional programming monad shapeless metaprogramming hlist functor recursion types
Tout plus