mutual recursion type inference