Input positions.
authorwenzelm
Tue, 19 May 1998 17:14:01 +0200
changeset 4942 067533f8c419
parent 4941 ac5da3e767b0
child 4943 a1b5d156ec33
Input positions.
src/Pure/Thy/position.ML
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Pure/Thy/position.ML	Tue May 19 17:14:01 1998 +0200
@@ -0,0 +1,48 @@
+(*  Title:      Pure/Thy/position.ML
+    ID:         $Id$
+    Author:     Markus Wenzel, TU Muenchen
+
+Input positions.
+*)
+
+signature POSITION =
+sig
+  eqtype T
+  val none: T
+  val line: int -> T
+  val name: string -> T
+  val line_name: int -> string -> T
+  val incr: T -> T
+  val str_of: T -> string
+end;
+
+structure Position: POSITION =
+struct
+
+
+(* datatype position *)
+
+datatype T =
+  Pos of int option * string option;
+
+val none = Pos (None, None);
+fun line n = Pos (Some n, None);
+fun name s = Pos (None, Some s);
+fun line_name n s = Pos (Some n, Some s);
+
+
+(* incr *)
+
+fun incr (pos as Pos (None, _)) = pos
+  | incr (Pos (Some n, opt_s)) = Pos (Some (n + 1), opt_s);
+
+
+(* str_of *)
+
+fun str_of (Pos (None, None)) = ""
+  | str_of (Pos (Some n, None)) = " (line " ^ string_of_int n ^ ")"
+  | str_of (Pos (None, Some s)) = " (" ^ s ^ ")"
+  | str_of (Pos (Some n, Some s)) = " (line " ^ string_of_int n ^ " of " ^ s ^ ")";
+
+
+end;