Taipan: Checking and Inferring Types