For example if the value is 1.3, the result is Valid(1, "1.3") when it should be Invalid "1.3". Basically we should return Valid(i, s) iff System.Int32.TryParse(s) = (true, i).