# HG changeset patch # User wenzelm # Date 1185648031 -7200 # Node ID 77e3e5781a996bd6c4cf94fcbbd50db4d5c5ec0a # Parent c46bd50df3f94cfa0d036ffe636dcc60aab1a8bc added :|-- (dependent projection); tuned; diff -r c46bd50df3f9 -r 77e3e5781a99 src/Pure/General/scan.ML --- a/src/Pure/General/scan.ML Sat Jul 28 20:40:30 2007 +0200 +++ b/src/Pure/General/scan.ML Sat Jul 28 20:40:31 2007 +0200 @@ -5,7 +5,7 @@ Generic scanners (for potentially infinite input). *) -infix 5 -- :-- |-- --| ^^; +infix 5 -- :-- :|-- |-- --| ^^; infix 3 >>; infixr 0 ||; @@ -21,9 +21,9 @@ val -- : ('a -> 'b * 'c) * ('c -> 'd * 'e) -> 'a -> ('b * 'd) * 'e (*dependent pairing*) val :-- : ('a -> 'b * 'c) * ('b -> 'c -> 'd * 'e) -> 'a -> ('b * 'd) * 'e - (*forget fst*) + (*projections*) + val :|-- : ('a -> 'b * 'c) * ('b -> 'c -> 'd * 'e) -> 'a -> 'd * 'e val |-- : ('a -> 'b * 'c) * ('c -> 'd * 'e) -> 'a -> 'd * 'e - (*forget snd*) val --| : ('a -> 'b * 'c) * ('c -> 'd * 'e) -> 'a -> 'b * 'e (*concatenation*) val ^^ : ('a -> string * 'b) * ('b -> string * 'c) -> 'a -> string * 'c @@ -116,6 +116,7 @@ in ((x, y), zs) end; fun (scan1 -- scan2) = scan1 :-- (fn _ => scan2); +fun (scan1 :|-- scan2) = scan1 :-- scan2 >> #2; fun (scan1 |-- scan2) = scan1 -- scan2 >> #2; fun (scan1 --| scan2) = scan1 -- scan2 >> #1; fun (scan1 ^^ scan2) = scan1 -- scan2 >> op ^;