letrec inference working
type inference fixes