Previous: Examples of correct code using type quantifiers, Up: Existentially typed predicates and functions [Contents]
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)