Related to what I looked into with extensible records, I was also curious
as to how strict the typing of case statements is. So I tried this:
type Val a b
= General (a -> b)
| Specific (a -> String)
test : Val a b -> (a -> b)
test val =
case val of
General func ->
Specific func ->
Should this not type check? test is returning a function which will accept
any type and will prouce some other type that we know nothing about. "a ->
String" is a more specific instance of such a function, so should type
check as "a -> b"?
Is the case statement typing too strict in requiring an exact match of all
its branches? Could it not work by calculating the most general unifier of
its branches and assume that type? MGU of a->b and a->String is a->b as it
is the minimal thing that unifies with both.
You received this message because you are subscribed to the Google Groups "Elm
To unsubscribe from this group and stop receiving emails from it, send an email
For more options, visit https://groups.google.com/d/optout.