Inferring Useful Static Types For Duck Typed Languages