Previous: Examples of correct code using type quantifiers, Up: Existentially typed predicates and functions


11.1.4 Examples of incorrect code using type quantifiers

Here are some examples of code using universal and existential types that contains type errors.

     /* simple examples */
     
     :- pred bad_foo(T).
     bad_foo(42).
     	% type error
     
     :- some [T] pred e_foo(T).
     e_foo(42).
     	% ok
     
     :- pred bad_call_e_foo.
     bad_call_e_foo :- e_foo(42).
     	% type error
     
     :- some [T] pred e_bar1(T).
     e_bar1(42).
     e_bar1(42).
     e_bar1(43).
     	% ok (T = int)
     
     :- some [T] pred bad_e_bar2(T).
     bad_e_bar2(42).
     bad_e_bar2("blah").
     	% type error (cannot unify types `int' and `string')
     
     :- some [T] pred bad_e_bar3(T).
     bad_e_bar3(X) :- e_foo(X).
     bad_e_bar3(X) :- e_foo(X).
     	% type error (attempt to bind type variable `T' twice)