--- /dev/null
+The *-DPH.* files are for parsing Jon Hill's "Data Parallel Haskell"
+variant. These notes indicate the differences from the regular
+parser. If they are much changed from what's below, someone probably
+needs to do some work.
+
+Note: you should also "grep" for "#ifdef DPH" in the C source files...
+
+Will Partain
+
+foreach i ( ttype.ugn tree.ugn hslexer.lex hsparser.y )
+ set base=$i:r
+ set suff=$i:e
+ diff -c2 $i $base-DPH.$suff
+end
+
+*** ttype.ugn Thu Nov 21 18:54:47 1991
+--- ttype-DPH.ugn Thu Jul 9 10:38:59 1992
+***************
+*** 12,15 ****
+--- 12,18 ----
+ context : < gtcontextl : list;
+ gtcontextt : ttype; >;
++ tproc : < gtpid : list;
++ gtdata : ttype; >;
++ tpod : < gtpod : ttype; >;
+ end;
+
+*** tree.ugn Thu May 14 17:13:43 1992
+--- tree-DPH.ugn Thu Jul 9 10:39:04 1992
+***************
+*** 62,64 ****
+--- 62,75 ----
+ gsccexp : tree; >;
+ negate : < gnexp : tree; >;
++ parzf : < gpzfexp : tree;
++ gpzfqual : list; >;
++ pardgen : < gdproc : tree;
++ gdexp : tree; >;
++ parigen : < giproc : tree;
++ giexp : tree; >;
++ parfilt : < gpfilt : tree; >;
++ pod : < gpod : list; >;
++ proc : < gpid : list;
++ gpdata : tree; >;
++
+ end;
+*** hslexer.lex Wed Jun 3 20:56:01 1992
+--- hslexer-DPH.lex Thu Jul 9 10:45:03 1992
+***************
+*** 17,20 ****
+--- 17,21 ----
+ * 04/12/91 kh Added Int#. *
+ * 31/01/92 kh Haskell 1.2 version. *
++ * 19/03/92 Jon Hill Added Data Parallel Notation *
+ * 24/04/92 ps Added 'scc'. *
+ * 03/06/92 kh Changed Infix/Prelude Handling. *
+***************
+*** 560,563 ****
+--- 561,570 ----
+ "_" { RETURN(WILDCARD); }
+ "`" { RETURN(BQUOTE); }
++ "<<" { RETURN(OPOD); }
++ ">>" { RETURN(CPOD); }
++ "(|" { RETURN(OPROC); }
++ "|)" { RETURN(CPROC); }
++ "<<-" { RETURN(DRAWNFROM); }
++ "<<=" { RETURN(INDEXFROM); }
+
+ <PRIM>("-")?{N}"#" {
+*** hsparser.y Thu Jul 9 10:58:27 1992
+--- hsparser-DPH.y Thu Jul 9 10:49:12 1992
+***************
+*** 5,9 ****
+ * Modified by: Kevin Hammond *
+ * Last date revised: December 13 1991. KH. *
+! * Modification: Haskell 1.1 Syntax. *
+ * *
+ * *
+--- 5,10 ----
+ * Modified by: Kevin Hammond *
+ * Last date revised: December 13 1991. KH. *
+! * Modification: o Haskell 1.1 Syntax. *
+! * o Data Parallel Syntax. *
+ * *
+ * *
+***************
+*** 15,19 ****
+ * *
+ * *
+! * LALR(1) Syntax for Haskell 1.2 *
+ * *
+ **************************************************************************/
+--- 16,20 ----
+ * *
+ * *
+! * LALR(1) Syntax for Haskell 1.2 + Data Parallelism *
+ * *
+ **************************************************************************/
+***************
+*** 146,149 ****
+--- 147,151 ----
+ %token OBRACK CBRACK OPAREN CPAREN
+ %token COMMA BQUOTE
++ %token OPOD CPOD OPROC CPROC
+
+
+***************
+*** 160,163 ****
+--- 162,166 ----
+ %token DCOLON LARROW
+ %token WILDCARD AT LAZY LAMBDA
++ %token DRAWNFROM INDEXFROM
+
+
+***************
+*** 210,213 ****
+--- 213,218 ----
+ %left OCURLY OBRACK OPAREN
+
++ %left OPOD OPROC
++
+ %left EQUAL
+
+***************
+*** 238,241 ****
+--- 243,248 ----
+ upto
+ cexp
++ tyvar_pids
++ parquals
+
+
+***************
+*** 246,249 ****
+--- 253,257 ----
+ dpatk fpatk opatk aapatk
+ texps
++ processor parqual
+
+ %type <uid> MINUS VARID CONID VARSYM CONSYM
+***************
+*** 605,610 ****
+--- 613,629 ----
+ | OBRACK tyvar CBRACK { $$ = mktllist($2); }
+ | OPAREN tyvar RARROW tyvar CPAREN { $$ = mktfun($2,$4); }
++ | OPOD tyvar CPOD { $$ = mktpod($2); }
++ | OPROC tyvar_pids SEMI tyvar CPROC { $$ = mktproc($2,$4); }
++ | OPOD tyvar_pids SEMI tyvar CPOD { $$ = mktpod(mktproc($2,$4));}
++ | OPOD OPROC tyvar_pids SEMI tyvar CPROC CPOD
++ { $$ = mktpod(mktproc($3,$5)); }
+ ;
+
++ /* Note (hilly) : Similar to tyvar_list except k>=1 not k>=2 */
++
++ tyvar_pids : tyvar COMMA tyvar_pids { $$ = mklcons($1,$3); }
++ | tyvar { $$ = lsing($1); }
++ ;
++
+ defaultd: defaultkey dtypes
+ {
+***************
+*** 740,743 ****
+--- 759,765 ----
+ | OPAREN type CPAREN { $$ = $2; }
+ | OBRACK type CBRACK { $$ = mktllist($2); }
++ | OPOD type CPOD { $$ = mktpod($2); }
++ | OPROC types SEMI type CPROC { $$ = mktproc($2,$4); }
++ | OPOD types SEMI type CPOD { $$ = mktpod(mktproc($2,$4));}
+ ;
+
+***************
+*** 1027,1030 ****
+--- 1049,1055 ----
+ | sequence { $$ = mkpar($1); }
+ | comprehension { $$ = mkpar($1); }
++ | OPOD exp VBAR parquals CPOD { $$ = mkparzf($2,$4); }
++ | OPOD exps CPOD { $$ = mkpod($2); }
++ | processor { $$ = mkpar($1); }
+
+ /* These only occur in patterns */
+***************
+*** 1035,1038 ****
+--- 1060,1076 ----
+
+
++ processor : OPROC exps SEMI exp CPROC { $$ = mkproc($2,$4); }
++ ;
++
++ parquals : parquals COMMA parqual { $$ = lapp($1,$3); }
++ | parqual { $$ = lsing($1); }
++ ;
++
++ parqual : exp { $$ = mkparfilt($1); }
++ | processor DRAWNFROM exp { $$ = mkpardgen($1,$3); }
++ | processor INDEXFROM exp { $$ = mkparigen($1,$3); }
++ ;
++
++
+ /*
+ LHS patterns are parsed in a similar way to
+***************
+*** 1131,1134 ****
+--- 1169,1173 ----
+ | OBRACK CBRACK { $$ = mkllist(Lnil); }
+ | LAZY apat { $$ = mklazyp($2); }
++ | OPROC pats SEMI apat CPROC { $$ = mkproc($2,$4); }
+ ;
+
+***************
+*** 1146,1149 ****
+--- 1185,1189 ----
+ | obrackkey CBRACK { $$ = mkllist(Lnil); }
+ | lazykey apat { $$ = mklazyp($2); }
++ | oprockey pats SEMI opat CPROC { $$ = mkproc($2,$4); }
+ ;
+
+***************
+*** 1283,1286 ****
+--- 1323,1327 ----
+ | OBRACK CBRACK { $$ = mkllist(Lnil); }
+ | LAZY apat { $$ = mklazyp($2); }
++ | OPROC pats SEMI apat CPROC { $$ = mkproc($2,$4); }
+ ;
+
+***************
+*** 1312,1315 ****
+--- 1353,1357 ----
+ | obrackkey CBRACK { $$ = mkllist(Lnil); }
+ | lazykey apat { $$ = mklazyp($2); }
++ | oprockey pats SEMI opat CPROC { $$ = mkproc($2,$4); }
+ ;
+ */
+***************
+*** 1372,1375 ****
+--- 1414,1419 ----
+ ;
+
++ oprockey: OPROC { setstartlineno(); }
++ ;
+
+