higherkindness /drosteScala39651recursion schemes for cats; to iterate is human, to recurse, divinescalarecursion-schemesfunctional-programming