September 22, 1999 | Strong Typing | Slide #20 |
Let's try to store a real into a MyNum and read it back as an int:
fun intval (IV x) = x;
Warning: match nonexhaustive IV x => ... val intval = fn : MyNum -> int
intval (FV 3.5);
uncaught exception Match...
You can make a union type, but you can't store one type and get it back as another type
intval extracts the integer member from a MyNum, but only in a type-safe way
We caused a run-time type error, but we got advance warning at compile time
It can do this for lists too:
fun Nth (0, (h::t)) = h | Nth (n, (h::t)) = Nth ((n-1), t) ;
Warning: match nonexhaustive ...
val Nth = fn : int * 'a list -> 'a
Next | Copyright © 1999 M-J. Dominus |