summaryrefslogtreecommitdiff
path: root/src/Transfer/Syntax
diff options
context:
space:
mode:
Diffstat (limited to 'src/Transfer/Syntax')
-rw-r--r--src/Transfer/Syntax/Abs.hs33
-rw-r--r--src/Transfer/Syntax/Doc.tex16
-rw-r--r--src/Transfer/Syntax/Layout.hs2
-rw-r--r--src/Transfer/Syntax/Lex.hs2
-rw-r--r--src/Transfer/Syntax/Lex.x2
-rw-r--r--src/Transfer/Syntax/Par.hs138
-rw-r--r--src/Transfer/Syntax/Par.y15
-rw-r--r--src/Transfer/Syntax/Print.hs9
-rw-r--r--src/Transfer/Syntax/Skel.hs2
-rw-r--r--src/Transfer/Syntax/Syntax.cf14
10 files changed, 121 insertions, 112 deletions
diff --git a/src/Transfer/Syntax/Abs.hs b/src/Transfer/Syntax/Abs.hs
index 7dfaf0596..357053d65 100644
--- a/src/Transfer/Syntax/Abs.hs
+++ b/src/Transfer/Syntax/Abs.hs
@@ -72,7 +72,6 @@ data Tree :: * -> * where
ENeg :: Exp -> Tree Exp_
EApp :: Exp -> Exp -> Tree Exp_
EProj :: Exp -> Ident -> Tree Exp_
- EEmptyRec :: Tree Exp_
ERecType :: [FieldType] -> Tree Exp_
ERec :: [FieldValue] -> Tree Exp_
EVar :: Ident -> Tree Exp_
@@ -232,7 +231,6 @@ instance Show (Tree c) where
ENeg exp -> opar n . showString "ENeg" . showChar ' ' . showsPrec 1 exp . cpar n
EApp exp0 exp1 -> opar n . showString "EApp" . showChar ' ' . showsPrec 1 exp0 . showChar ' ' . showsPrec 1 exp1 . cpar n
EProj exp i -> opar n . showString "EProj" . showChar ' ' . showsPrec 1 exp . showChar ' ' . showsPrec 1 i . cpar n
- EEmptyRec -> showString "EEmptyRec"
ERecType fieldtypes -> opar n . showString "ERecType" . showChar ' ' . showsPrec 1 fieldtypes . cpar n
ERec fieldvalues -> opar n . showString "ERec" . showChar ' ' . showsPrec 1 fieldvalues . cpar n
EVar i -> opar n . showString "EVar" . showChar ' ' . showsPrec 1 i . cpar n
@@ -291,7 +289,6 @@ johnMajorEq (EMod exp0 exp1) (EMod exp0_ exp1_) = exp0 == exp0_ && exp1 == exp1_
johnMajorEq (ENeg exp) (ENeg exp_) = exp == exp_
johnMajorEq (EApp exp0 exp1) (EApp exp0_ exp1_) = exp0 == exp0_ && exp1 == exp1_
johnMajorEq (EProj exp i) (EProj exp_ i_) = exp == exp_ && i == i_
-johnMajorEq EEmptyRec EEmptyRec = True
johnMajorEq (ERecType fieldtypes) (ERecType fieldtypes_) = fieldtypes == fieldtypes_
johnMajorEq (ERec fieldvalues) (ERec fieldvalues_) = fieldvalues == fieldvalues_
johnMajorEq (EVar i) (EVar i_) = i == i_
@@ -349,21 +346,20 @@ instance Ord (Tree c) where
index (ENeg _) = 35
index (EApp _ _) = 36
index (EProj _ _) = 37
- index (EEmptyRec ) = 38
- index (ERecType _) = 39
- index (ERec _) = 40
- index (EVar _) = 41
- index (EType ) = 42
- index (EStr _) = 43
- index (EInt _) = 44
- index (EMeta ) = 45
- index (LetDef _ _ _) = 46
- index (Case _ _) = 47
- index (VVar _) = 48
- index (VWild ) = 49
- index (FieldType _ _) = 50
- index (FieldValue _ _) = 51
- index (Ident _) = 52
+ index (ERecType _) = 38
+ index (ERec _) = 39
+ index (EVar _) = 40
+ index (EType ) = 41
+ index (EStr _) = 42
+ index (EInt _) = 43
+ index (EMeta ) = 44
+ index (LetDef _ _ _) = 45
+ index (Case _ _) = 46
+ index (VVar _) = 47
+ index (VWild ) = 48
+ index (FieldType _ _) = 49
+ index (FieldValue _ _) = 50
+ index (Ident _) = 51
compareSame (Module imports decls) (Module imports_ decls_) = mappend (compare imports imports_) (compare decls decls_)
compareSame (Import i) (Import i_) = compare i i_
compareSame (DataDecl i exp consdecls) (DataDecl i_ exp_ consdecls_) = mappend (compare i i_) (mappend (compare exp exp_) (compare consdecls consdecls_))
@@ -402,7 +398,6 @@ instance Ord (Tree c) where
compareSame (ENeg exp) (ENeg exp_) = compare exp exp_
compareSame (EApp exp0 exp1) (EApp exp0_ exp1_) = mappend (compare exp0 exp0_) (compare exp1 exp1_)
compareSame (EProj exp i) (EProj exp_ i_) = mappend (compare exp exp_) (compare i i_)
- compareSame EEmptyRec EEmptyRec = EQ
compareSame (ERecType fieldtypes) (ERecType fieldtypes_) = compare fieldtypes fieldtypes_
compareSame (ERec fieldvalues) (ERec fieldvalues_) = compare fieldvalues fieldvalues_
compareSame (EVar i) (EVar i_) = compare i i_
diff --git a/src/Transfer/Syntax/Doc.tex b/src/Transfer/Syntax/Doc.tex
index ba8d22b1f..b8940a398 100644
--- a/src/Transfer/Syntax/Doc.tex
+++ b/src/Transfer/Syntax/Doc.tex
@@ -48,7 +48,8 @@ The reserved words used in Syntax are the following: \\
{\reserved{Type}} &{\reserved{case}} &{\reserved{data}} \\
{\reserved{derive}} &{\reserved{else}} &{\reserved{if}} \\
{\reserved{import}} &{\reserved{in}} &{\reserved{let}} \\
-{\reserved{of}} &{\reserved{then}} &{\reserved{where}} \\
+{\reserved{of}} &{\reserved{rec}} &{\reserved{sig}} \\
+{\reserved{then}} &{\reserved{where}} & \\
\end{tabular}\\
The symbols used in Syntax are the following: \\
@@ -118,7 +119,7 @@ All other symbols are terminals.\\
\begin{tabular}{lll}
{\nonterminal{Pattern1}} & {\arrow} &{\terminal{(}} {\nonterminal{Ident}} {\nonterminal{ListPattern}} {\terminal{)}} \\
- & {\delimit} &{\terminal{\{}} {\nonterminal{ListFieldPattern}} {\terminal{\}}} \\
+ & {\delimit} &{\terminal{rec}} {\terminal{\{}} {\nonterminal{ListFieldPattern}} {\terminal{\}}} \\
& {\delimit} &{\terminal{Type}} \\
& {\delimit} &{\nonterminal{String}} \\
& {\delimit} &{\nonterminal{Integer}} \\
@@ -229,9 +230,8 @@ All other symbols are terminals.\\
\end{tabular}\\
\begin{tabular}{lll}
-{\nonterminal{Exp11}} & {\arrow} &{\terminal{\{}} {\terminal{\}}} \\
- & {\delimit} &{\terminal{\{}} {\nonterminal{ListFieldType}} {\terminal{\}}} \\
- & {\delimit} &{\terminal{\{}} {\nonterminal{ListFieldValue}} {\terminal{\}}} \\
+{\nonterminal{Exp11}} & {\arrow} &{\terminal{sig}} {\terminal{\{}} {\nonterminal{ListFieldType}} {\terminal{\}}} \\
+ & {\delimit} &{\terminal{rec}} {\terminal{\{}} {\nonterminal{ListFieldValue}} {\terminal{\}}} \\
& {\delimit} &{\nonterminal{Ident}} \\
& {\delimit} &{\terminal{Type}} \\
& {\delimit} &{\nonterminal{String}} \\
@@ -245,7 +245,8 @@ All other symbols are terminals.\\
\end{tabular}\\
\begin{tabular}{lll}
-{\nonterminal{ListFieldType}} & {\arrow} &{\nonterminal{FieldType}} \\
+{\nonterminal{ListFieldType}} & {\arrow} &{\emptyP} \\
+ & {\delimit} &{\nonterminal{FieldType}} \\
& {\delimit} &{\nonterminal{FieldType}} {\terminal{;}} {\nonterminal{ListFieldType}} \\
\end{tabular}\\
@@ -254,7 +255,8 @@ All other symbols are terminals.\\
\end{tabular}\\
\begin{tabular}{lll}
-{\nonterminal{ListFieldValue}} & {\arrow} &{\nonterminal{FieldValue}} \\
+{\nonterminal{ListFieldValue}} & {\arrow} &{\emptyP} \\
+ & {\delimit} &{\nonterminal{FieldValue}} \\
& {\delimit} &{\nonterminal{FieldValue}} {\terminal{;}} {\nonterminal{ListFieldValue}} \\
\end{tabular}\\
diff --git a/src/Transfer/Syntax/Layout.hs b/src/Transfer/Syntax/Layout.hs
index 31417038d..08e4ba980 100644
--- a/src/Transfer/Syntax/Layout.hs
+++ b/src/Transfer/Syntax/Layout.hs
@@ -10,7 +10,7 @@ import Data.Maybe (isNothing, fromJust)
-- local parameters
topLayout = True
-layoutWords = ["let","where","of"]
+layoutWords = ["let","where","of","rec","sig"]
layoutStopWords = ["in"]
-- layout separators
diff --git a/src/Transfer/Syntax/Lex.hs b/src/Transfer/Syntax/Lex.hs
index 86f366166..3a6305200 100644
--- a/src/Transfer/Syntax/Lex.hs
+++ b/src/Transfer/Syntax/Lex.hs
@@ -84,7 +84,7 @@ eitherResIdent tv s = treeFind resWords
| s > a = treeFind right
| s == a = t
-resWords = b "import" (b "derive" (b "case" (b "Type" N N) (b "data" N N)) (b "if" (b "else" N N) N)) (b "of" (b "let" (b "in" N N) N) (b "where" (b "then" N N) N))
+resWords = b "in" (b "derive" (b "case" (b "Type" N N) (b "data" N N)) (b "if" (b "else" N N) (b "import" N N))) (b "sig" (b "of" (b "let" N N) (b "rec" N N)) (b "where" (b "then" N N) N))
where b s = B s (TS s)
unescapeInitTail :: String -> String
diff --git a/src/Transfer/Syntax/Lex.x b/src/Transfer/Syntax/Lex.x
index f61124bb7..556ecd2b0 100644
--- a/src/Transfer/Syntax/Lex.x
+++ b/src/Transfer/Syntax/Lex.x
@@ -79,7 +79,7 @@ eitherResIdent tv s = treeFind resWords
| s > a = treeFind right
| s == a = t
-resWords = b "import" (b "derive" (b "case" (b "Type" N N) (b "data" N N)) (b "if" (b "else" N N) N)) (b "of" (b "let" (b "in" N N) N) (b "where" (b "then" N N) N))
+resWords = b "in" (b "derive" (b "case" (b "Type" N N) (b "data" N N)) (b "if" (b "else" N N) (b "import" N N))) (b "sig" (b "of" (b "let" N N) (b "rec" N N)) (b "where" (b "then" N N) N))
where b s = B s (TS s)
unescapeInitTail :: String -> String
diff --git a/src/Transfer/Syntax/Par.hs b/src/Transfer/Syntax/Par.hs
index b5a1b5ff1..b18aee0c0 100644
--- a/src/Transfer/Syntax/Par.hs
+++ b/src/Transfer/Syntax/Par.hs
@@ -237,21 +237,21 @@ happyOutTok x = unsafeCoerce# x
{-# INLINE happyOutTok #-}
happyActOffsets :: HappyAddr
-happyActOffsets = HappyA# "\x92\x02\x30\x00\x8a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x85\x02\x00\x00\xa5\x02\xa2\x02\xa0\x02\x95\x02\x00\x02\x00\x00\x5e\x00\x93\x02\x00\x00\x00\x00\x19\x00\x16\x00\x13\x00\x56\x00\x00\x00\x00\x00\x30\x00\x30\x00\x9b\x02\x00\x00\x00\x00\x80\x02\x9a\x02\x1e\x02\x77\x02\x00\x00\x98\x02\x96\x02\x00\x00\x65\x02\x65\x02\x66\x02\x5c\x02\x5d\x02\x5b\x02\x00\x00\x30\x00\x00\x00\x43\x02\x00\x00\xfe\xff\x74\x02\x46\x02\x4e\x00\x3f\x02\x3b\x02\x1d\x02\x19\x02\x00\x00\xf6\x01\x03\x02\x56\x00\x56\x00\x56\x00\x56\x00\x56\x00\x56\x00\x56\x00\x56\x00\x56\x00\x56\x00\x56\x00\x56\x00\x56\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x02\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xeb\x01\x00\x00\xeb\x01\x30\x00\x30\x00\x30\x00\x00\x00\x30\x00\x08\x02\x30\x00\xac\x01\x9d\x01\x8a\x01\x00\x00\x58\x01\x6c\x01\x1e\x02\x40\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x01\x30\x00\x38\x01\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x2d\x01\x18\x01\x30\x00\x10\x01\x5a\x00\x00\x00\x17\x01\x00\x00\x00\x00\x0c\x01\x00\x00\x05\x02\x00\x00\xf5\x00\x5a\x00\xe5\x00\x00\x00\xdd\x00\xca\x00\x30\x00\xf2\x01\x00\x00\x30\x00\xb6\x01\x00\x00\x00\x00\xc9\x01\xbd\x00\xaa\x00\x00\x00\x66\x00\x5a\x00\x26\x00\x9b\x00\x00\x00\x30\x00\x00\x00\x00\x00\x5a\x00\x30\x00\x00\x00\x30\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x61\x00\x00\x00\x00\x00\x00\x00\x81\x00\x7e\x00\x6f\x00\x00\x00\x48\x00\x30\x00\x00\x00\x00\x00\x00\x00"#
+happyActOffsets = HappyA# "\x87\x02\x4a\x00\x80\x02\x00\x00\x00\x00\x00\x00\x00\x00\x65\x02\x00\x00\x9d\x02\x85\x02\x83\x02\xa2\x02\x21\x02\x00\x00\x6a\x00\x76\x02\x00\x00\x00\x00\x38\x00\xfb\xff\x61\x00\x00\x00\x00\x00\x4a\x00\x4a\x00\x8a\x02\x89\x02\x88\x02\x00\x00\x00\x00\x52\x02\x79\x02\x7c\x00\x48\x02\x00\x00\x69\x02\x5a\x02\x00\x00\x47\x02\x47\x02\x28\x02\x1f\x02\x1f\x02\x1f\x02\x20\x02\x19\x02\x00\x00\x4a\x00\x00\x00\x1e\x02\x00\x00\x21\x00\x13\x02\x08\x02\xf1\x01\xe2\x01\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x21\x02\x21\x02\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x00\x00\x4a\x00\xe7\x01\x4a\x00\xd8\x01\xc9\x01\xb6\x01\x12\x02\xa9\x01\x96\x01\x88\x01\x79\x01\x66\x01\x00\x00\x32\x01\x48\x01\x7c\x00\xfc\xff\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x12\x01\x00\x00\x00\x00\x27\x01\x00\x00\x4a\x00\x00\x00\x00\x00\xf2\x00\x4a\x00\x00\x00\xf2\x00\x4a\x00\xe9\x00\xd2\x00\x4a\x00\xcc\x00\x8f\x00\x00\x00\xd1\x00\xbf\x00\x8f\x00\xad\x00\x00\x00\xb3\x00\xab\x00\x4a\x00\x8c\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x00\x82\x00\x00\x00\x00\x00\x76\x00\x7b\x00\x78\x00\x69\x00\x73\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x8f\x00\x4a\x00\x00\x00\x4a\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x3e\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x5d\x00\x5a\x00\x55\x00\x00\x00\x1f\x00\x4a\x00\x00\x00\x00\x00\x00\x00"#
happyGotoOffsets :: HappyAddr
-happyGotoOffsets = HappyA# "\xc6\x01\xb9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x02\x00\x00\x00\x00\x00\x00\xbe\x01\x79\x00\x1f\x00\x6c\x02\x00\x00\x00\x00\xa9\x01\x99\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x02\x6d\x00\x00\x00\x57\x00\x00\x00\x00\x00\x37\x00\x32\x00\xe6\x01\x65\x00\x00\x00\x00\x00\x00\x00\x89\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x4d\x02\x49\x02\x45\x02\x37\x02\x18\x02\x12\x02\x0c\x02\x06\x02\xe7\x01\x41\x02\x3c\x02\xe1\x01\xd8\x01\x79\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x69\x01\x59\x01\x49\x01\x00\x00\x39\x01\x00\x00\x29\x01\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x3b\x00\x94\x02\x19\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x09\x01\x1a\x00\x00\x00\x00\x00\x00\x00\xf9\x00\x00\x00\x00\x00\x5b\x00\xe9\x00\x00\x00\x8e\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x02\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\x00\x00\x00\x00\xc9\x00\x00\x00\xfc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x75\x02\x78\x02\x00\x00\x00\x00\xb9\x00\x00\x00\x00\x00\x72\x02\xa9\x00\xf7\xff\x99\x00\x00\x00\x78\x02\x00\x00\x00\x00\x00\x00\xe4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x89\x00\x00\x00\x00\x00\x00\x00"#
+happyGotoOffsets = HappyA# "\x25\x02\xf5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\xa6\x00\x05\x00\x7f\x02\x00\x00\x00\x00\xe5\x01\xd5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x02\x41\x00\x00\x00\x15\x00\x00\x00\x00\x00\x3f\x00\x2b\x00\xce\x00\x68\x00\x22\x00\x71\x00\x00\x00\x00\x00\x00\x00\xc5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x7b\x02\x77\x02\x6c\x02\x58\x02\x49\x02\x43\x02\x39\x02\x33\x02\x24\x02\x68\x02\xb0\x00\x14\x02\x05\x02\xb5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x01\x00\x00\x95\x01\x00\x00\x85\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x96\x00\xa1\x02\x75\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x65\x01\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x01\x00\x00\x00\x00\x58\x00\x45\x01\x00\x00\x1b\x00\x35\x01\x00\x00\x0e\x00\x25\x01\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x9e\x02\x00\x00\x00\x00\x00\x00\x00\x00\x15\x01\x00\x00\x00\x00\x05\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x01\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf5\x00\x00\x00\x00\x00\x06\x00\xe5\x00\xfd\xff\xd5\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xa5\x02\x00\x00\x48\x00\xa1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x00\xc5\x00\x00\x00\x00\x00\x00\x00"#
happyDefActions :: HappyAddr
-happyDefActions = HappyA# "\xf8\xff\x00\x00\x00\x00\xfd\xff\xae\xff\xac\xff\xab\xff\x00\x00\xa2\xff\xcc\xff\xc8\xff\xc6\xff\xbf\xff\xbc\xff\xb8\xff\xb6\xff\xb4\xff\xb2\xff\xd8\xff\x00\x00\x00\x00\x00\x00\x00\x00\xaa\xff\xad\xff\x00\x00\x00\x00\x00\x00\xfc\xff\xfb\xff\x00\x00\xf7\xff\xf1\xff\x00\x00\xf9\xff\xe1\xff\xf0\xff\xfa\xff\x00\x00\x00\x00\xf8\xff\xd6\xff\x00\x00\x00\x00\xb7\xff\x00\x00\xcb\xff\x00\x00\xca\xff\xcb\xff\x00\x00\x00\x00\x00\x00\xa7\xff\x00\x00\xa4\xff\x00\x00\xb1\xff\x00\x00\xb5\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\xff\xc9\xff\xc7\xff\xbd\xff\xbe\xff\xc0\xff\xc1\xff\xc2\xff\xc3\xff\xc4\xff\xc5\xff\xb9\xff\xba\xff\xbb\xff\xb3\xff\xaf\xff\x00\x00\xb0\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa9\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd5\xff\x00\x00\xf6\xff\x00\x00\x00\x00\xf1\xff\x00\x00\x00\x00\xf4\xff\xe3\xff\xe5\xff\xe4\xff\xe0\xff\xde\xff\x00\x00\x00\x00\xe2\xff\xe6\xff\xef\xff\x00\x00\xf2\xff\x00\x00\xd6\xff\x00\x00\x00\x00\xd2\xff\xcf\xff\x00\x00\xa5\xff\xa8\xff\x00\x00\xa6\xff\x00\x00\xa3\xff\x00\x00\xe3\xff\x00\x00\xe9\xff\xd1\xff\x00\x00\x00\x00\x00\x00\xd4\xff\x00\x00\x00\x00\xe1\xff\xf3\xff\x00\x00\xdd\xff\x00\x00\xe7\xff\xde\xff\x00\x00\x00\x00\x00\x00\xdb\xff\x00\x00\xd9\xff\xda\xff\xd2\xff\x00\x00\xe1\xff\x00\x00\xce\xff\xea\xff\xd3\xff\xd0\xff\xd7\xff\xed\xff\xe8\xff\xdf\xff\xdc\xff\x00\x00\xec\xff\x00\x00\xf5\xff\xed\xff\x00\x00\xee\xff\xeb\xff"#
+happyDefActions = HappyA# "\xf8\xff\x00\x00\x00\x00\xfd\xff\xaf\xff\xad\xff\xac\xff\x00\x00\xa1\xff\xcc\xff\xc8\xff\xc6\xff\xbf\xff\xbc\xff\xb8\xff\xb6\xff\xb4\xff\xb2\xff\xd8\xff\x00\x00\x00\x00\x00\x00\xab\xff\xae\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xfb\xff\x00\x00\xf7\xff\xf1\xff\x00\x00\xf9\xff\xe1\xff\xf0\xff\xfa\xff\x00\x00\x00\x00\xf8\xff\xa8\xff\xa4\xff\xd6\xff\x00\x00\x00\x00\xb7\xff\x00\x00\xcb\xff\x00\x00\xca\xff\xcb\xff\x00\x00\x00\x00\x00\x00\xb5\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\xff\xc9\xff\xc7\xff\xbd\xff\xbe\xff\xc0\xff\xc1\xff\xc2\xff\xc3\xff\xc4\xff\xc5\xff\xb9\xff\xba\xff\xbb\xff\xb3\xff\x00\x00\xaa\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd5\xff\x00\x00\x00\x00\xa3\xff\x00\x00\x00\x00\xa7\xff\x00\x00\xf6\xff\x00\x00\x00\x00\xf1\xff\x00\x00\x00\x00\xf4\xff\xe3\xff\xe5\xff\xe4\xff\xe0\xff\x00\x00\x00\x00\xe2\xff\xe6\xff\x00\x00\xef\xff\x00\x00\xf2\xff\xb1\xff\xa8\xff\x00\x00\xb0\xff\xa4\xff\x00\x00\x00\x00\xd6\xff\x00\x00\x00\x00\xd2\xff\xcf\xff\x00\x00\x00\x00\xe3\xff\x00\x00\xe9\xff\xd1\xff\x00\x00\x00\x00\x00\x00\xd4\xff\x00\x00\xa5\xff\xa2\xff\xa9\xff\xa6\xff\x00\x00\xde\xff\xe1\xff\xf3\xff\x00\x00\x00\x00\xdd\xff\x00\x00\x00\x00\xdb\xff\x00\x00\xd9\xff\xda\xff\xd2\xff\x00\x00\xe1\xff\x00\x00\xce\xff\xea\xff\xd3\xff\xd0\xff\xd7\xff\xed\xff\xe7\xff\xde\xff\x00\x00\xe8\xff\xdf\xff\xdc\xff\x00\x00\xec\xff\x00\x00\xf5\xff\xed\xff\x00\x00\xee\xff\xeb\xff"#
happyCheck :: HappyAddr
-happyCheck = HappyA# "\xff\xff\x03\x00\x00\x00\x0c\x00\x06\x00\x07\x00\x00\x00\x09\x00\x0c\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x03\x00\x00\x00\x08\x00\x06\x00\x04\x00\x08\x00\x00\x00\x0a\x00\x1f\x00\x20\x00\x00\x00\x26\x00\x27\x00\x28\x00\x21\x00\x22\x00\x03\x00\x14\x00\x00\x00\x06\x00\x07\x00\x08\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x03\x00\x15\x00\x1f\x00\x06\x00\x00\x00\x22\x00\x26\x00\x0a\x00\x00\x00\x26\x00\x27\x00\x28\x00\x26\x00\x1a\x00\x06\x00\x07\x00\x03\x00\x14\x00\x05\x00\x06\x00\x00\x00\x08\x00\x19\x00\x1a\x00\x1b\x00\x26\x00\x27\x00\x28\x00\x1f\x00\x02\x00\x00\x00\x22\x00\x05\x00\x0d\x00\x0e\x00\x26\x00\x27\x00\x28\x00\x03\x00\x1a\x00\x00\x00\x06\x00\x03\x00\x0d\x00\x0e\x00\x06\x00\x03\x00\x08\x00\x0c\x00\x06\x00\x00\x00\x26\x00\x27\x00\x28\x00\x00\x00\x14\x00\x10\x00\x11\x00\x00\x00\x26\x00\x19\x00\x1a\x00\x08\x00\x09\x00\x04\x00\x1a\x00\x10\x00\x11\x00\x19\x00\x1a\x00\x00\x00\x01\x00\x02\x00\x26\x00\x27\x00\x28\x00\x01\x00\x26\x00\x27\x00\x28\x00\x02\x00\x26\x00\x27\x00\x28\x00\x26\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x26\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x03\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x04\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x01\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x04\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x01\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x09\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x09\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x02\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x07\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x1e\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x26\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x21\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x26\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x02\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x26\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x04\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x01\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x02\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x03\x00\x04\x00\x05\x00\x23\x00\x14\x00\x05\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x00\x00\x01\x00\x02\x00\x25\x00\x23\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x00\x00\x01\x00\x02\x00\x00\x00\x13\x00\x14\x00\x00\x00\x01\x00\x02\x00\x04\x00\x05\x00\x08\x00\x09\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x05\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x00\x00\x01\x00\x02\x00\x00\x00\x05\x00\x03\x00\x00\x00\x01\x00\x02\x00\x06\x00\x07\x00\x26\x00\x00\x00\x01\x00\x02\x00\x15\x00\x16\x00\x17\x00\x00\x00\x01\x00\x02\x00\x18\x00\x26\x00\x04\x00\x01\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x00\x00\x01\x00\x02\x00\x1c\x00\x1d\x00\x00\x00\x01\x00\x02\x00\x04\x00\x01\x00\x00\x00\x01\x00\x02\x00\x26\x00\x00\x00\x01\x00\x02\x00\x02\x00\x00\x00\x01\x00\x02\x00\x09\x00\x00\x00\x01\x00\x02\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x07\x00\x0a\x00\x0b\x00\x23\x00\x0a\x00\x0b\x00\x24\x00\x26\x00\x0b\x00\x12\x00\x13\x00\x20\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x26\x00\x1d\x00\x1e\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x01\x00\x0a\x00\x0b\x00\x02\x00\x01\x00\x0b\x00\x26\x00\x03\x00\x0b\x00\x12\x00\x13\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x2a\x00\x18\x00\x0c\x00\x0b\x00\x09\x00\x2a\x00\x26\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+happyCheck = HappyA# "\xff\xff\x05\x00\x06\x00\x08\x00\x08\x00\x00\x00\x00\x00\x01\x00\x02\x00\x0c\x00\x00\x00\x01\x00\x02\x00\x0c\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x13\x00\x14\x00\x0a\x00\x0b\x00\x1a\x00\x00\x00\x12\x00\x13\x00\x15\x00\x00\x00\x12\x00\x13\x00\x10\x00\x11\x00\x24\x00\x0c\x00\x00\x00\x28\x00\x28\x00\x29\x00\x2a\x00\x06\x00\x07\x00\x00\x00\x09\x00\x00\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x21\x00\x22\x00\x06\x00\x00\x00\x08\x00\x00\x00\x0a\x00\x21\x00\x22\x00\x24\x00\x25\x00\x28\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x14\x00\x00\x00\x01\x00\x02\x00\x06\x00\x19\x00\x1a\x00\x1b\x00\x0a\x00\x0d\x00\x0e\x00\x1f\x00\x00\x00\x04\x00\x22\x00\x01\x00\x24\x00\x25\x00\x14\x00\x02\x00\x28\x00\x29\x00\x2a\x00\x19\x00\x1a\x00\x1b\x00\x28\x00\x06\x00\x00\x00\x1f\x00\x1d\x00\x1e\x00\x22\x00\x04\x00\x24\x00\x25\x00\x06\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x14\x00\x03\x00\x1f\x00\x20\x00\x01\x00\x19\x00\x1a\x00\x06\x00\x07\x00\x08\x00\x00\x00\x05\x00\x10\x00\x11\x00\x19\x00\x1a\x00\x24\x00\x25\x00\x1f\x00\x20\x00\x28\x00\x29\x00\x2a\x00\x0d\x00\x0e\x00\x24\x00\x25\x00\x1a\x00\x05\x00\x28\x00\x29\x00\x2a\x00\x06\x00\x00\x00\x08\x00\x1c\x00\x1d\x00\x24\x00\x27\x00\x06\x00\x07\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x01\x00\x02\x00\x28\x00\x00\x00\x00\x00\x01\x00\x02\x00\x1a\x00\x28\x00\x0a\x00\x0b\x00\x08\x00\x09\x00\x04\x00\x00\x00\x01\x00\x02\x00\x24\x00\x01\x00\x0f\x00\x09\x00\x28\x00\x29\x00\x2a\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x00\x00\x01\x00\x02\x00\x09\x00\x23\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x00\x00\x01\x00\x02\x00\x04\x00\x05\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x07\x00\x14\x00\x0b\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x1e\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x28\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x21\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x28\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x03\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x28\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x02\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x28\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x04\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x01\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x02\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x04\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x01\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x04\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x01\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x02\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x03\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x18\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x00\x00\x01\x00\x02\x00\x23\x00\x14\x00\x02\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x00\x00\x01\x00\x02\x00\x05\x00\x23\x00\x28\x00\x07\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x00\x00\x01\x00\x02\x00\x09\x00\x03\x00\x04\x00\x05\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x00\x00\x01\x00\x02\x00\x15\x00\x16\x00\x17\x00\x00\x00\x01\x00\x02\x00\x23\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x00\x00\x01\x00\x02\x00\x26\x00\x28\x00\x20\x00\x00\x00\x01\x00\x02\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x00\x00\x01\x00\x02\x00\x01\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x00\x00\x01\x00\x02\x00\x02\x00\x00\x00\x01\x00\x02\x00\x28\x00\x28\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x00\x00\x01\x00\x02\x00\x01\x00\x00\x00\x01\x00\x02\x00\x2c\x00\x00\x00\x01\x00\x02\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x03\x00\x03\x00\x03\x00\x18\x00\x0c\x00\x0b\x00\x2c\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x00\x00\x01\x00\x02\x00\x00\x00\x01\x00\x02\x00\x00\x00\x00\x00\x09\x00\x20\x00\x28\x00\x0b\x00\x06\x00\x07\x00\x0b\x00\x08\x00\x09\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
happyTable :: HappyAddr
-happyTable = HappyA# "\x00\x00\xae\xff\x83\x00\xa5\x00\xae\xff\xae\xff\x85\x00\xae\xff\x9a\x00\xae\xff\xae\xff\xae\xff\xae\xff\xae\xff\xae\xff\xae\xff\xae\xff\xae\xff\xae\xff\xae\xff\xae\xff\xae\xff\xae\xff\xae\xff\xae\xff\x14\x00\x92\x00\x31\x00\x15\x00\x3a\x00\x31\x00\x2e\x00\x16\x00\x35\x00\x84\x00\x79\x00\xae\xff\xae\xff\xae\xff\x37\x00\x86\x00\x73\x00\x17\x00\x58\x00\x75\x00\xab\x00\x76\x00\x18\x00\x19\x00\x1a\x00\x68\x00\x14\x00\x2f\x00\x1b\x00\x15\x00\x69\x00\x1c\x00\x04\x00\x16\x00\x23\x00\x04\x00\x1d\x00\x1e\x00\x04\x00\x77\x00\x24\x00\x77\x00\x73\x00\x17\x00\x74\x00\x75\x00\x94\x00\x76\x00\x18\x00\x19\x00\x1a\x00\x04\x00\x1d\x00\x1e\x00\x1b\x00\x5e\x00\x94\x00\x1c\x00\x5f\x00\x95\x00\xac\x00\x04\x00\x1d\x00\x1e\x00\x14\x00\x77\x00\x64\x00\x2e\x00\x73\x00\x95\x00\x96\x00\x75\x00\x14\x00\x76\x00\x6b\x00\x2e\x00\x64\x00\x04\x00\x1d\x00\x1e\x00\xad\x00\x17\x00\x65\x00\x8f\x00\x22\x00\x04\x00\x18\x00\x19\x00\xae\x00\xb4\x00\xb1\x00\x77\x00\x65\x00\x66\x00\x18\x00\x19\x00\x31\x00\x05\x00\x06\x00\x04\x00\x1d\x00\x1e\x00\xb2\x00\x04\x00\x1d\x00\x1e\x00\xb3\x00\x04\x00\x1d\x00\x1e\x00\x04\x00\x32\x00\x04\x00\x05\x00\x06\x00\x04\x00\x08\x00\x33\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\xb3\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\xaa\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\xa4\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x98\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\xa6\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x99\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\xa8\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\xa0\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x9c\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\xa1\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x9e\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\xa2\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x8e\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\xa4\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x91\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x5e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x93\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x88\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x6d\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x8e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x7d\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x04\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x7f\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x91\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x80\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x04\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x81\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x79\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x82\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x04\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x4a\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x7b\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x32\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x7c\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x2a\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x7d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x2b\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x34\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x07\x00\x1e\x00\x1f\x00\x20\x00\x12\x00\x08\x00\x9a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x04\x00\x05\x00\x06\x00\x9c\x00\x12\x00\x35\x00\x36\x00\x37\x00\x38\x00\x04\x00\x05\x00\x06\x00\xad\x00\x46\x00\x47\x00\x04\x00\x05\x00\x06\x00\x1f\x00\x67\x00\xae\x00\xaf\x00\x4b\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x9e\x00\x4c\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x4f\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x04\x00\x05\x00\x06\x00\x23\x00\x5f\x00\x7f\x00\x04\x00\x05\x00\x06\x00\x24\x00\x25\x00\x04\x00\x04\x00\x05\x00\x06\x00\x3d\x00\x3e\x00\x3f\x00\x04\x00\x05\x00\x06\x00\x3b\x00\x04\x00\x5a\x00\x5b\x00\x50\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x51\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x52\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x53\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x04\x00\x05\x00\x06\x00\x27\x00\x28\x00\x04\x00\x05\x00\x06\x00\x5c\x00\x5d\x00\x04\x00\x05\x00\x06\x00\x04\x00\x04\x00\x05\x00\x06\x00\x60\x00\x04\x00\x05\x00\x06\x00\x62\x00\x04\x00\x05\x00\x06\x00\x54\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x4d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x4e\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x55\x00\x0f\x00\x10\x00\x11\x00\x56\x00\x0f\x00\x10\x00\x11\x00\x57\x00\x0f\x00\x10\x00\x11\x00\x04\x00\x05\x00\x06\x00\x04\x00\x05\x00\x06\x00\x88\x00\x6f\x00\x70\x00\x88\x00\x6f\x00\x70\x00\x6e\x00\x6f\x00\x70\x00\x61\x00\x89\x00\x8a\x00\x63\x00\xab\x00\x8a\x00\x64\x00\x04\x00\x71\x00\x8b\x00\xa7\x00\x22\x00\x2c\x00\x0f\x00\x10\x00\x11\x00\x04\x00\x3b\x00\x11\x00\x88\x00\x6f\x00\x70\x00\x6e\x00\x6f\x00\x70\x00\x6e\x00\x6f\x00\x70\x00\x6b\x00\x89\x00\x8a\x00\x6d\x00\x29\x00\xa2\x00\x04\x00\x2a\x00\x71\x00\x8b\x00\x8c\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\xff\xff\x3b\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x04\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+happyTable = HappyA# "\x00\x00\x70\x00\x71\x00\x34\x00\x72\x00\x31\x00\x85\x00\x6c\x00\x6d\x00\xa4\x00\x85\x00\x6c\x00\x6d\x00\x96\x00\x5b\x00\x94\x00\x86\x00\x87\x00\x43\x00\x44\x00\x86\x00\x87\x00\x73\x00\x76\x00\x88\x00\xa6\x00\x32\x00\x5e\x00\x88\x00\x89\x00\x5c\x00\x8c\x00\x74\x00\x68\x00\x5e\x00\x04\x00\x04\x00\x1e\x00\x1f\x00\xaf\xff\xaf\xff\x55\x00\xaf\xff\x65\x00\xaf\xff\xaf\xff\xaf\xff\xaf\xff\xaf\xff\xaf\xff\xaf\xff\xaf\xff\xaf\xff\xaf\xff\xaf\xff\xaf\xff\xaf\xff\xaf\xff\xaf\xff\xaf\xff\x5f\x00\x8f\x00\x14\x00\x66\x00\x34\x00\x23\x00\x15\x00\x5f\x00\x60\x00\xaf\xff\xaf\xff\x04\x00\x97\x00\xaf\xff\xaf\xff\xaf\xff\x16\x00\x04\x00\x05\x00\x06\x00\x14\x00\x17\x00\x18\x00\x19\x00\x15\x00\x98\x00\xae\x00\x1a\x00\x61\x00\xb3\x00\x1b\x00\xb4\x00\x1c\x00\x1d\x00\x16\x00\xb5\x00\x04\x00\x1e\x00\x1f\x00\x17\x00\x18\x00\x19\x00\x04\x00\x31\x00\x61\x00\x1a\x00\x38\x00\x11\x00\x1b\x00\xaa\x00\x1c\x00\x1d\x00\x31\x00\x5b\x00\x04\x00\x1e\x00\x1f\x00\x16\x00\xa9\x00\x62\x00\x91\x00\xab\x00\x17\x00\x18\x00\x71\x00\xad\x00\x72\x00\x97\x00\xac\x00\x5c\x00\x5d\x00\x17\x00\x18\x00\x1c\x00\x1d\x00\x62\x00\x63\x00\x04\x00\x1e\x00\x1f\x00\x98\x00\x99\x00\x1c\x00\x1d\x00\x73\x00\x9d\x00\x04\x00\x1e\x00\x1f\x00\x71\x00\x24\x00\x72\x00\x28\x00\x29\x00\x74\x00\x9b\x00\x25\x00\x74\x00\x04\x00\x1e\x00\x1f\x00\x85\x00\x6c\x00\x6d\x00\x04\x00\xaf\x00\x34\x00\x05\x00\x06\x00\x73\x00\x04\x00\xad\x00\x87\x00\xb0\x00\xb6\x00\x9f\x00\x04\x00\x05\x00\x06\x00\x74\x00\xa0\x00\x35\x00\xa1\x00\x04\x00\x1e\x00\x1f\x00\x08\x00\x36\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x04\x00\x05\x00\x06\x00\xa3\x00\x12\x00\x4a\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x6b\x00\x6c\x00\x6d\x00\x20\x00\x64\x00\xb5\x00\x04\x00\x05\x00\x06\x00\x85\x00\x08\x00\x6e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\xa3\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x8b\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\xa5\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x04\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\xa7\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x8e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x9b\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x04\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x9d\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x94\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x8b\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x04\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x8e\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x76\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x90\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x04\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x92\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x78\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x95\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x79\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x6a\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x7a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x80\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x7b\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x82\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x7c\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x83\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x7e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x47\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x7f\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x35\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x80\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x2d\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x82\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x2e\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x38\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x07\x00\x04\x00\x05\x00\x06\x00\x12\x00\x08\x00\x57\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x04\x00\x05\x00\x06\x00\x7d\x00\x12\x00\x04\x00\x58\x00\x48\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x04\x00\x05\x00\x06\x00\x59\x00\x1f\x00\x20\x00\x21\x00\x49\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x04\x00\x05\x00\x06\x00\x3a\x00\x3b\x00\x3c\x00\x04\x00\x05\x00\x06\x00\x5a\x00\x4c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x04\x00\x05\x00\x06\x00\x5b\x00\x04\x00\x23\x00\x04\x00\x05\x00\x06\x00\x4d\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x4e\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x04\x00\x05\x00\x06\x00\x68\x00\x4f\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x50\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x04\x00\x05\x00\x06\x00\x6a\x00\x04\x00\x05\x00\x06\x00\x04\x00\x04\x00\x51\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x04\x00\x05\x00\x06\x00\x2a\x00\x04\x00\x05\x00\x06\x00\xff\xff\x04\x00\x05\x00\x06\x00\x4b\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x52\x00\x0f\x00\x10\x00\x11\x00\x2b\x00\x2c\x00\x2d\x00\x38\x00\x45\x00\x46\x00\xff\xff\x53\x00\x0f\x00\x10\x00\x11\x00\x54\x00\x0f\x00\x10\x00\x11\x00\x2f\x00\x0f\x00\x10\x00\x11\x00\x6b\x00\x6c\x00\x6d\x00\x6b\x00\x6c\x00\x6d\x00\x24\x00\xaf\x00\x47\x00\x23\x00\x04\x00\xa1\x00\x25\x00\x26\x00\x6e\x00\xb0\x00\xb1\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
-happyReduceArr = array (2, 93) [
+happyReduceArr = array (2, 94) [
(2 , happyReduce_2),
(3 , happyReduce_3),
(4 , happyReduce_4),
@@ -343,10 +343,11 @@ happyReduceArr = array (2, 93) [
(90 , happyReduce_90),
(91 , happyReduce_91),
(92 , happyReduce_92),
- (93 , happyReduce_93)
+ (93 , happyReduce_93),
+ (94 , happyReduce_94)
]
-happy_n_terms = 43 :: Int
+happy_n_terms = 45 :: Int
happy_n_nonterms = 36 :: Int
happyReduce_2 = happySpecReduce_1 0# happyReduction_2
@@ -543,14 +544,16 @@ happyReduction_23 (happy_x_4 `HappyStk`
(PCons happy_var_2 (reverse happy_var_3)
) `HappyStk` happyRest}}
-happyReduce_24 = happySpecReduce_3 11# happyReduction_24
-happyReduction_24 happy_x_3
- happy_x_2
- happy_x_1
- = case happyOut19 happy_x_2 of { happy_var_2 ->
+happyReduce_24 = happyReduce 4# 11# happyReduction_24
+happyReduction_24 (happy_x_4 `HappyStk`
+ happy_x_3 `HappyStk`
+ happy_x_2 `HappyStk`
+ happy_x_1 `HappyStk`
+ happyRest)
+ = case happyOut19 happy_x_3 of { happy_var_3 ->
happyIn16
- (PRec happy_var_2
- )}
+ (PRec happy_var_3
+ ) `HappyStk` happyRest}
happyReduce_25 = happySpecReduce_1 11# happyReduction_25
happyReduction_25 happy_x_1
@@ -1020,66 +1023,63 @@ happyReduction_77 happy_x_1
(happy_var_1
)}
-happyReduce_78 = happySpecReduce_2 30# happyReduction_78
-happyReduction_78 happy_x_2
- happy_x_1
- = happyIn35
- (EEmptyRec
- )
-
-happyReduce_79 = happySpecReduce_3 30# happyReduction_79
-happyReduction_79 happy_x_3
- happy_x_2
- happy_x_1
- = case happyOut37 happy_x_2 of { happy_var_2 ->
+happyReduce_78 = happyReduce 4# 30# happyReduction_78
+happyReduction_78 (happy_x_4 `HappyStk`
+ happy_x_3 `HappyStk`
+ happy_x_2 `HappyStk`
+ happy_x_1 `HappyStk`
+ happyRest)
+ = case happyOut37 happy_x_3 of { happy_var_3 ->
happyIn35
- (ERecType happy_var_2
- )}
+ (ERecType happy_var_3
+ ) `HappyStk` happyRest}
-happyReduce_80 = happySpecReduce_3 30# happyReduction_80
-happyReduction_80 happy_x_3
- happy_x_2
- happy_x_1
- = case happyOut39 happy_x_2 of { happy_var_2 ->
+happyReduce_79 = happyReduce 4# 30# happyReduction_79
+happyReduction_79 (happy_x_4 `HappyStk`
+ happy_x_3 `HappyStk`
+ happy_x_2 `HappyStk`
+ happy_x_1 `HappyStk`
+ happyRest)
+ = case happyOut39 happy_x_3 of { happy_var_3 ->
happyIn35
- (ERec happy_var_2
- )}
+ (ERec happy_var_3
+ ) `HappyStk` happyRest}
-happyReduce_81 = happySpecReduce_1 30# happyReduction_81
-happyReduction_81 happy_x_1
+happyReduce_80 = happySpecReduce_1 30# happyReduction_80
+happyReduction_80 happy_x_1
= case happyOut5 happy_x_1 of { happy_var_1 ->
happyIn35
(EVar happy_var_1
)}
-happyReduce_82 = happySpecReduce_1 30# happyReduction_82
-happyReduction_82 happy_x_1
+happyReduce_81 = happySpecReduce_1 30# happyReduction_81
+happyReduction_81 happy_x_1
= happyIn35
(EType
)
-happyReduce_83 = happySpecReduce_1 30# happyReduction_83
-happyReduction_83 happy_x_1
+happyReduce_82 = happySpecReduce_1 30# happyReduction_82
+happyReduction_82 happy_x_1
= case happyOut6 happy_x_1 of { happy_var_1 ->
happyIn35
(EStr happy_var_1
)}
-happyReduce_84 = happySpecReduce_1 30# happyReduction_84
-happyReduction_84 happy_x_1
+happyReduce_83 = happySpecReduce_1 30# happyReduction_83
+happyReduction_83 happy_x_1
= case happyOut7 happy_x_1 of { happy_var_1 ->
happyIn35
(EInt happy_var_1
)}
-happyReduce_85 = happySpecReduce_1 30# happyReduction_85
-happyReduction_85 happy_x_1
+happyReduce_84 = happySpecReduce_1 30# happyReduction_84
+happyReduction_84 happy_x_1
= happyIn35
(EMeta
)
-happyReduce_86 = happySpecReduce_3 30# happyReduction_86
-happyReduction_86 happy_x_3
+happyReduce_85 = happySpecReduce_3 30# happyReduction_85
+happyReduction_85 happy_x_3
happy_x_2
happy_x_1
= case happyOut20 happy_x_2 of { happy_var_2 ->
@@ -1087,8 +1087,8 @@ happyReduction_86 happy_x_3
(happy_var_2
)}
-happyReduce_87 = happySpecReduce_3 31# happyReduction_87
-happyReduction_87 happy_x_3
+happyReduce_86 = happySpecReduce_3 31# happyReduction_86
+happyReduction_86 happy_x_3
happy_x_2
happy_x_1
= case happyOut5 happy_x_1 of { happy_var_1 ->
@@ -1097,6 +1097,11 @@ happyReduction_87 happy_x_3
(FieldType happy_var_1 happy_var_3
)}}
+happyReduce_87 = happySpecReduce_0 32# happyReduction_87
+happyReduction_87 = happyIn37
+ ([]
+ )
+
happyReduce_88 = happySpecReduce_1 32# happyReduction_88
happyReduction_88 happy_x_1
= case happyOut36 happy_x_1 of { happy_var_1 ->
@@ -1124,15 +1129,20 @@ happyReduction_90 happy_x_3
(FieldValue happy_var_1 happy_var_3
)}}
-happyReduce_91 = happySpecReduce_1 34# happyReduction_91
-happyReduction_91 happy_x_1
+happyReduce_91 = happySpecReduce_0 34# happyReduction_91
+happyReduction_91 = happyIn39
+ ([]
+ )
+
+happyReduce_92 = happySpecReduce_1 34# happyReduction_92
+happyReduction_92 happy_x_1
= case happyOut38 happy_x_1 of { happy_var_1 ->
happyIn39
((:[]) happy_var_1
)}
-happyReduce_92 = happySpecReduce_3 34# happyReduction_92
-happyReduction_92 happy_x_3
+happyReduce_93 = happySpecReduce_3 34# happyReduction_93
+happyReduction_93 happy_x_3
happy_x_2
happy_x_1
= case happyOut38 happy_x_1 of { happy_var_1 ->
@@ -1141,15 +1151,15 @@ happyReduction_92 happy_x_3
((:) happy_var_1 happy_var_3
)}}
-happyReduce_93 = happySpecReduce_1 35# happyReduction_93
-happyReduction_93 happy_x_1
+happyReduce_94 = happySpecReduce_1 35# happyReduction_94
+happyReduction_94 happy_x_1
= case happyOut25 happy_x_1 of { happy_var_1 ->
happyIn40
(happy_var_1
)}
happyNewToken action sts stk [] =
- happyDoAction 42# (error "reading EOF!") action sts stk []
+ happyDoAction 44# (error "reading EOF!") action sts stk []
happyNewToken action sts stk (tk:tks) =
let cont i = happyDoAction i tk action sts stk tks in
@@ -1189,12 +1199,14 @@ happyNewToken action sts stk (tk:tks) =
PT _ (TS "in") -> cont 33#;
PT _ (TS "let") -> cont 34#;
PT _ (TS "of") -> cont 35#;
- PT _ (TS "then") -> cont 36#;
- PT _ (TS "where") -> cont 37#;
- PT _ (TV happy_dollar_dollar) -> cont 38#;
- PT _ (TL happy_dollar_dollar) -> cont 39#;
- PT _ (TI happy_dollar_dollar) -> cont 40#;
- _ -> cont 41#;
+ PT _ (TS "rec") -> cont 36#;
+ PT _ (TS "sig") -> cont 37#;
+ PT _ (TS "then") -> cont 38#;
+ PT _ (TS "where") -> cont 39#;
+ PT _ (TV happy_dollar_dollar) -> cont 40#;
+ PT _ (TL happy_dollar_dollar) -> cont 41#;
+ PT _ (TI happy_dollar_dollar) -> cont 42#;
+ _ -> cont 43#;
_ -> happyError' (tk:tks)
}
diff --git a/src/Transfer/Syntax/Par.y b/src/Transfer/Syntax/Par.y
index 42a8ec002..5bb795c0f 100644
--- a/src/Transfer/Syntax/Par.y
+++ b/src/Transfer/Syntax/Par.y
@@ -49,6 +49,8 @@ import Transfer.ErrM
'in' { PT _ (TS "in") }
'let' { PT _ (TS "let") }
'of' { PT _ (TS "of") }
+ 'rec' { PT _ (TS "rec") }
+ 'sig' { PT _ (TS "sig") }
'then' { PT _ (TS "then") }
'where' { PT _ (TS "where") }
@@ -108,7 +110,7 @@ Pattern : Ident Pattern1 ListPattern { PConsTop $1 $2 (reverse $3) }
Pattern1 :: { Pattern }
Pattern1 : '(' Ident ListPattern ')' { PCons $2 (reverse $3) }
- | '{' ListFieldPattern '}' { PRec $2 }
+ | 'rec' '{' ListFieldPattern '}' { PRec $3 }
| 'Type' { PType }
| String { PStr $1 }
| Integer { PInt $1 }
@@ -219,9 +221,8 @@ Exp10 : Exp10 '.' Ident { EProj $1 $3 }
Exp11 :: { Exp }
-Exp11 : '{' '}' { EEmptyRec }
- | '{' ListFieldType '}' { ERecType $2 }
- | '{' ListFieldValue '}' { ERec $2 }
+Exp11 : 'sig' '{' ListFieldType '}' { ERecType $3 }
+ | 'rec' '{' ListFieldValue '}' { ERec $3 }
| Ident { EVar $1 }
| 'Type' { EType }
| String { EStr $1 }
@@ -235,7 +236,8 @@ FieldType : Ident ':' Exp { FieldType $1 $3 }
ListFieldType :: { [FieldType] }
-ListFieldType : FieldType { (:[]) $1 }
+ListFieldType : {- empty -} { [] }
+ | FieldType { (:[]) $1 }
| FieldType ';' ListFieldType { (:) $1 $3 }
@@ -244,7 +246,8 @@ FieldValue : Ident '=' Exp { FieldValue $1 $3 }
ListFieldValue :: { [FieldValue] }
-ListFieldValue : FieldValue { (:[]) $1 }
+ListFieldValue : {- empty -} { [] }
+ | FieldValue { (:[]) $1 }
| FieldValue ';' ListFieldValue { (:) $1 $3 }
diff --git a/src/Transfer/Syntax/Print.hs b/src/Transfer/Syntax/Print.hs
index c9dcacdf5..ee692bd90 100644
--- a/src/Transfer/Syntax/Print.hs
+++ b/src/Transfer/Syntax/Print.hs
@@ -89,7 +89,7 @@ instance Print (Tree c) where
ConsDecl i exp -> prPrec _i 0 (concatD [prt 0 i , doc (showString ":") , prt 0 exp])
PConsTop i pattern patterns -> prPrec _i 0 (concatD [prt 0 i , prt 1 pattern , prt 0 patterns])
PCons i patterns -> prPrec _i 1 (concatD [doc (showString "(") , prt 0 i , prt 0 patterns , doc (showString ")")])
- PRec fieldpatterns -> prPrec _i 1 (concatD [doc (showString "{") , prt 0 fieldpatterns , doc (showString "}")])
+ PRec fieldpatterns -> prPrec _i 1 (concatD [doc (showString "rec") , doc (showString "{") , prt 0 fieldpatterns , doc (showString "}")])
PType -> prPrec _i 1 (concatD [doc (showString "Type")])
PStr str -> prPrec _i 1 (concatD [prt 0 str])
PInt n -> prPrec _i 1 (concatD [prt 0 n])
@@ -118,9 +118,8 @@ instance Print (Tree c) where
ENeg exp -> prPrec _i 8 (concatD [doc (showString "-") , prt 8 exp])
EApp exp0 exp1 -> prPrec _i 9 (concatD [prt 9 exp0 , prt 10 exp1])
EProj exp i -> prPrec _i 10 (concatD [prt 10 exp , doc (showString ".") , prt 0 i])
- EEmptyRec -> prPrec _i 11 (concatD [doc (showString "{") , doc (showString "}")])
- ERecType fieldtypes -> prPrec _i 11 (concatD [doc (showString "{") , prt 0 fieldtypes , doc (showString "}")])
- ERec fieldvalues -> prPrec _i 11 (concatD [doc (showString "{") , prt 0 fieldvalues , doc (showString "}")])
+ ERecType fieldtypes -> prPrec _i 11 (concatD [doc (showString "sig") , doc (showString "{") , prt 0 fieldtypes , doc (showString "}")])
+ ERec fieldvalues -> prPrec _i 11 (concatD [doc (showString "rec") , doc (showString "{") , prt 0 fieldvalues , doc (showString "}")])
EVar i -> prPrec _i 11 (concatD [prt 0 i])
EType -> prPrec _i 11 (concatD [doc (showString "Type")])
EStr str -> prPrec _i 11 (concatD [prt 0 str])
@@ -170,9 +169,11 @@ instance Print [Case] where
x:xs -> (concatD [prt 0 x , doc (showString ";") , prt 0 xs])
instance Print [FieldType] where
prt _ es = case es of
+ [] -> (concatD [])
[x] -> (concatD [prt 0 x])
x:xs -> (concatD [prt 0 x , doc (showString ";") , prt 0 xs])
instance Print [FieldValue] where
prt _ es = case es of
+ [] -> (concatD [])
[x] -> (concatD [prt 0 x])
x:xs -> (concatD [prt 0 x , doc (showString ";") , prt 0 xs])
diff --git a/src/Transfer/Syntax/Skel.hs b/src/Transfer/Syntax/Skel.hs
index 4d2dd8f55..2142cd59d 100644
--- a/src/Transfer/Syntax/Skel.hs
+++ b/src/Transfer/Syntax/Skel.hs
@@ -49,7 +49,6 @@ transTree t = case t of
ENeg exp -> failure t
EApp exp0 exp1 -> failure t
EProj exp i -> failure t
- EEmptyRec -> failure t
ERecType fieldtypes -> failure t
ERec fieldvalues -> failure t
EVar i -> failure t
@@ -123,7 +122,6 @@ transExp t = case t of
ENeg exp -> failure t
EApp exp0 exp1 -> failure t
EProj exp i -> failure t
- EEmptyRec -> failure t
ERecType fieldtypes -> failure t
ERec fieldvalues -> failure t
EVar i -> failure t
diff --git a/src/Transfer/Syntax/Syntax.cf b/src/Transfer/Syntax/Syntax.cf
index 1c4ecb559..1d7083eb3 100644
--- a/src/Transfer/Syntax/Syntax.cf
+++ b/src/Transfer/Syntax/Syntax.cf
@@ -1,6 +1,6 @@
entrypoints Module, Exp ;
-layout "let", "where", "of" ;
+layout "let", "where", "of","rec", "sig" ;
layout stop "in" ;
layout toplevel ;
@@ -28,7 +28,7 @@ _. Pattern ::= Pattern1 ;
-- Constructor pattern with parantheses
PCons. Pattern1 ::= "(" Ident [Pattern] ")" ;
-- Record patterns
-PRec. Pattern1 ::= "{" [FieldPattern] "}";
+PRec. Pattern1 ::= "rec" "{" [FieldPattern] "}";
-- The pattern matching the Type constant
PType. Pattern1 ::= "Type" ;
-- String literal patterns
@@ -85,15 +85,13 @@ EApp. Exp9 ::= Exp9 Exp10 ;
EProj. Exp10 ::= Exp10 "." Ident ;
-EEmptyRec. Exp11 ::= "{" "}" ;
-
-ERecType. Exp11 ::= "{" [FieldType] "}" ;
+ERecType. Exp11 ::= "sig" "{" [FieldType] "}" ;
FieldType. FieldType ::= Ident ":" Exp ;
-separator nonempty FieldType ";" ;
+separator FieldType ";" ;
-ERec. Exp11 ::= "{" [FieldValue] "}" ;
+ERec. Exp11 ::= "rec" "{" [FieldValue] "}" ;
FieldValue.FieldValue ::= Ident "=" Exp ;
-separator nonempty FieldValue ";" ;
+separator FieldValue ";" ;
EVar. Exp11 ::= Ident ;
EType. Exp11 ::= "Type" ;