/* This is legal. The second type "a" simply hides the first one. Because of the intervening variable declaration, the two "a" types*/ let function foo (x:int) : int = x+10 type a = int var b := 42 type a = string in foo(b) end