scala functional programming monad shapeless metaprogramming hlist functor recursion types
See more