higherkindness / droste Scala 396 51 recursion schemes for cats; to iterate is human, to recurse, divine scala recursion-schemes functional-programming