On Thursday, February 16, 2017 at 2:59:41 PM UTC, Rupert Smith wrote:
>
> On Thursday, February 16, 2017 at 2:50:10 PM UTC, Martin Cerny wrote:
>>
>> I would say not type checking your example is correct behavior. Since all 
>> occurrences of a type parameter have to resolve to the same type, the value 
>> of test is not defined if b resolves to anything other than String. And 
>> thus the compiler expects you to say it is a string. To be more specific, 
>> if your code would compile, the following would also compile, which is bad:
>>
>> intToString: Int -> String
>> intToString a = 
>>   "Value:" ++ (toString a)
>>
>> err: Int->Int
>> err =
>>   test (Specific intToString)
>>
>> showError:Int
>> showError =
>>   err 5  --Now I am casting a string "Value:5" to int.
>>  
>>
>
> I think you got the type of the 'err' function wrong? It would be Int -> 
> String (as it applies test to a Val Int String). So err 5 would be 
> "Value:5", a String as expected.
>

Sorry, my bad, but its easy to get confused. You are right, "Specific 
intToString" has type "Val Int b", you then bound b to Int in the type spec 
for err, so it does have the type "Int -> Int". 

So the problem is that using the MGU would allow under-specified return 
types which can then be coerced into the wrong type leading to a runtime 
error.

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elm-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to