src/Pure/Isar/args.ML
changeset 27819 6398f7aabdfc
parent 27811 44bc67675210
child 27882 eaa9fef9f4c1
--- a/src/Pure/Isar/args.ML	Sun Aug 10 12:38:22 2008 +0200
+++ b/src/Pure/Isar/args.ML	Sun Aug 10 12:38:23 2008 +0200
@@ -179,7 +179,7 @@
   (case T.get_value arg of SOME v => (SOME (dest v) handle Match => NONE) | NONE => NONE));
 
 fun evaluate mk eval arg =
-  let val x = eval (T.content_of arg) in (T.assign (SOME (mk x)) arg; x) end;
+  let val x = eval arg in (T.assign (SOME (mk x)) arg; x) end;
 
 val internal_text = value (fn T.Text s => s);
 val internal_typ = value (fn T.Typ T => T);
@@ -187,11 +187,12 @@
 val internal_fact = value (fn T.Fact ths => ths);
 val internal_attribute = value (fn T.Attribute att => att);
 
-fun named_text intern = internal_text || named >> evaluate T.Text intern;
-fun named_typ readT = internal_typ || named >> evaluate T.Typ readT;
-fun named_term read = internal_term || named >> evaluate T.Term read;
-fun named_fact get = internal_fact || (alt_string || named) >> evaluate T.Fact get;
-fun named_attribute att = internal_attribute || named >> evaluate T.Attribute att;
+fun named_text intern = internal_text || named >> evaluate T.Text (intern o T.content_of);
+fun named_typ readT = internal_typ || named >> evaluate T.Typ (readT o T.source_of);
+fun named_term read = internal_term || named >> evaluate T.Term (read o T.source_of);
+fun named_fact get = internal_fact || named >> evaluate T.Fact (get o T.content_of) ||
+  alt_string >> evaluate T.Fact (get o T.source_of);
+fun named_attribute att = internal_attribute || named >> evaluate T.Attribute (att o T.content_of);
 
 
 (* terms and types *)
@@ -258,7 +259,8 @@
 
 fun attribs intern =
   let
-    val attrib_name = internal_text || (symbolic || named) >> evaluate T.Text intern;
+    val attrib_name = internal_text || (symbolic || named)
+      >> evaluate T.Text (intern o T.content_of);
     val attrib = P.position (attrib_name -- P.!!! parse) >> src;
   in $$$ "[" |-- P.!!! (P.list attrib --| $$$ "]") end;