diff -r 25da60d0a20b -r d7d525466221 src/Pure/object.ML --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/Pure/object.ML Fri Jun 05 14:21:11 1998 +0200 @@ -0,0 +1,42 @@ +(* Title: Pure/object.ML + ID: $Id$ + Author: Markus Wenzel, TU Muenchen + +Generic objects of arbitrary type -- fool the ML type system via +exception constructors. +*) + +signature OBJECT = +sig + type T + type kind + val kind: string -> kind + val name_of_kind: kind -> string + val eq_kind: kind * kind -> bool + val kind_error: kind -> 'a +end; + +structure Object: OBJECT = +struct + + +(* anytype values *) + +type T = exn; + + +(* kinds *) + +datatype kind = Kind of string * stamp; + +fun kind name = Kind (name, stamp ()); + +fun name_of_kind (Kind (name, _)) = name; + +fun eq_kind (Kind (_, s1), Kind (_, s2)) = s1 = s2; + +fun kind_error k = + error ("## RUNTIME TYPE ERROR ##\nFailed to access " ^ quote (name_of_kind k) ^ " object"); + + +end;