newTypeVar :: InferenceState Int
newTypeVar = do usedTypes <- get
                let newVar = pickFresh usedTypes
                put (newVar:usedTypes)
                return newVar
newTypeVar :: InferenceState Int
newTypeVar = do usedTypes <- get
                let newVar = pickFresh usedTypes
                put (newVar:usedTypes)
                return newVar
newTypeVar = do usedTypes <- get
                let newVar = pickFresh usedTypes
                put (newVar:usedTypes)
                return newVar