HXQ 0.7.2 → 0.7.4
raw patch · 18 files changed
+2355/−2530 lines, 18 filesdep +readline
Dependencies added: readline
Files
- HXQ.cabal +27/−35
- HXQ.hs +93/−0
- Main.hs +48/−23
- Makefile +12/−3
- XQuery.hs +2/−1
- XQueryCompiler.hs +23/−191
- XQueryInterpreter.hs +60/−23
- XQueryOptimizer.hs +156/−0
- XQueryParser.hs +1747/−1680
- XQueryParser.y +59/−18
- XTree.hs +101/−0
- hxml-0.2/Arrow.hs +0/−194
- hxml-0.2/Filter.hs +0/−82
- hxml-0.2/Misc.hs +2/−0
- hxml-0.2/NTree.hs +0/−84
- hxml-0.2/XMLCombinators.hs +0/−182
- index.html +24/−14
- profile.hs +1/−0
HXQ.cabal view
@@ -1,56 +1,48 @@+Cabal-Version: >= 1.2 Name: HXQ-Version: 0.7.2-Synopsis: An XQuery Compiler and Interpreter+Version: 0.7.4+Synopsis: A Compiler from XQuery to Haskell Description: HXQ is a fast and space-efficient compiler from XQuery (the standard query language for XML) to embedded Haskell code. The translation is- based on Haskell templates. It also provide an interpreter for+ based on Haskell templates. It also provides an interpreter for evaluating ad-hoc XQueries read from input or from files. Category: XML-build-type: Simple+Build-type: Simple License-file: LICENSE-License: GPL+License: BSD3 Author: Leonidas Fegaras+Copyright: 2008, Leonidas Fegaras+Stability: experimental Maintainer: fegaras@cse.uta.edu Homepage: http://lambda.uta.edu/HXQ/-extra-source-files:+Extra-Source-Files: Makefile+ HXQ.hs+ XQueryParser.y+ Test1.hs+ Test2.hs+ profile.hs+ compile+data-files: index.html data/cs.xml data/q1.xq data/q2.xq data/dblp.xq data/dblp2.xq- XQuery.hs- XQueryParser.hs- XQueryParser.y- XQueryCompiler.hs- XQueryInterpreter.hs- Test1.hs- Test2.hs- profile.hs- compile- hxml-0.2/Arrow.hs- hxml-0.2/LLParsing.hs- hxml-0.2/XML.hs- hxml-0.2/AssocList.hs- hxml-0.2/Misc.hs- hxml-0.2/XMLParse.hs- hxml-0.2/DTD.hs- hxml-0.2/NTree.hs- hxml-0.2/XMLScanner.hs- hxml-0.2/ETree.hs- hxml-0.2/PrintXML.hs- hxml-0.2/Filter.hs- hxml-0.2/TreeBuild.hs- hxml-0.2/Tree.hs- hxml-0.2/HXML.hs- hxml-0.2/XMLCombinators.hs hxml-0.2/00-LICENSE.txt hxml-0.2/00-README.txt -Build-Depends: base, haskell98, array, template-haskell+Library+ Exposed-Modules: XQuery+ Other-Modules: XTree, XQueryCompiler, XQueryInterpreter, XQueryParser, XQueryOptimizer,+ HXML, DTD, LLParsing, TreeBuild, XMLParse, ETree, Misc, Tree,+ XMLScanner, AssocList, PrintXML, XML+ hs-source-dirs: . hxml-0.2+ Build-Depends: base, haskell98, array, readline, template-haskell -Executable: xquery-Main-is: Main.hs-ghc-options: -ihxml-0.2+Executable xquery+ Main-is: Main.hs+ hs-source-dirs: . hxml-0.2+ Build-Depends: base, haskell98, array, readline, template-haskell
+ HXQ.hs view
@@ -0,0 +1,93 @@+{--------------------------------------------------------------+-+- The main program of the XQuery Compiler+- **** UNSTABLE *****+- Programmer: Leonidas Fegaras (fegaras@cse.uta.edu)+- Date: 05/02/2008+-+---------------------------------------------------------------}++module Main where++import GHC+import DynFlags+import Packages+import PackageConfig+import System.IO+import XQuery+import System.Environment+import qualified Control.Exception+import XQueryCompiler(functions)+import XQueryInterpreter(evalInput)+++version = "0.7.4"+default_system_path = "/usr/local/lib/ghc-6.8.2"+default_hxq_path = "./"+++parseEnv :: [String] -> [(String,String)]+parseEnv [] = [("hxq",default_hxq_path),("ghc",default_system_path),("o","Temp.hs")]+parseEnv ("-help":xs) = ("help",""):(parseEnv xs)+parseEnv ("-c":file:xs) = ("c",file):(parseEnv xs)+parseEnv ("-o":file:xs) = ("o",file):(parseEnv xs)+parseEnv ("-p":query:file:xs) = ("p","doc('"++file++"')"++query):(parseEnv xs)+parseEnv ("-h":path:xs) = ("hxq",path):(parseEnv xs)+parseEnv ("-l":path:xs) = ("ghc",path):(parseEnv xs)+parseEnv (('-':x):_) = error ("Unrecognized option -"++x++". Use -help.")+parseEnv (file:xs) = ("r",file):(parseEnv xs)+++main = do putStrLn ("HXQ: XQuery Compiler version "++version)+ senv <- getArgs+ let env = parseEnv senv+ Just system_path = lookup "ghc" env+ Just hxq_path = lookup "hxq" env+ case lookup "help" env of+ Just _ -> do putStrLn "Command line options and files:"+ putStrLn "xquery-file compile and run the XQuery in xquery-file"+ putStrLn "-c xquery-file compile the XQuery in xquery-file into Haskell code"+ putStrLn "-o haskell-file set the Haskell file for -c (default is Temp.hs)"+ putStrLn "-p XPath-query xml-file compile and run the XPath query against the xml-file"+ putStrLn ("-h path set the HXQ installation directory (default is "++default_hxq_path++")")+ putStrLn ("-l path set the GHC installation directory (default is "++default_system_path++")")+ putStrLn ("Functions: "++(foldr (\(f,_,_) r -> f++" "++r) "" functions))+ _ -> case lookup "c" env of+ Just file -> do query <- readFile file+ let qf = map (\c -> if c=='\"' then '\'' else c)+ (foldr1 (\a r -> a++" "++r) (lines query))+ pr = "{-# OPTIONS_GHC -fth #-}\nmodule Main where\nimport XQuery\n\nmain = do res <- $(xq \""+ ++ qf ++ "\")\n putXSeq res\n"+ Just ofile = lookup "o" env+ writeFile ofile pr+ _ -> do session <- newSession (Just system_path)+ dflags0 <- getSessionDynFlags session+ (dflags1,b) <- parseDynamicFlags dflags0 ["-fglasgow-exts", "-O2", "-fth", "-fobject-code",+ --"-package HXQ", "-package ghc"]+ "-i"++hxq_path++":"++hxq_path++"hxml-0.2"]+ (dflags2, _) <- initPackages dflags1+ setSessionDynFlags session dflags2+ --load session LoadAllTargets+ let preludeModule = mkModule (stringToPackageId "base") (mkModuleName "Prelude")+ --xqueryModule = mkModule (stringToPackageId "HXQ") (mkModuleName "XQuery")+ setContext session [] [preludeModule]+ t <- guessTarget (hxq_path++"XQuery.hs") Nothing+ addTarget session t+ f <- getSessionDynFlags session+ sf <- defaultCleanupHandler f (load session LoadAllTargets)+ --ff <- load session (LoadDependenciesOf (mkModuleName "XQuery"))+ case lookup "r" env of+ Just file -> do q <- readFile file+ let qf = map (\c -> if c=='\"' then '\'' else c)+ (foldr1 (\a r -> a++" "++r) (lines q))+ query = "do result <- $(XQuery.xq \""++qf++"\"); XQuery.putXSeq result"+ _ <- runStmt session query SingleStep+ return ()+ _ -> case lookup "p" env of+ Just query -> do _ <- runStmt session ("do result <- $(XQuery.xq \""++query+ ++"\"); XQuery.putXSeq result") SingleStep+ return ()+ _ -> do putStrLn "To write an XQuery in multiple lines, wrap it in {}"+ evalInput (\s vs fs -> let query = "do result <- $(XQuery.xq \""++s++"\"); XQuery.putXSeq result"+ in Control.Exception.catch (do runStmt session query SingleStep; return (vs,fs))+ (\e -> do putStrLn (show e); return (vs,fs))) [] []
Main.hs view
@@ -2,7 +2,7 @@ - - The main program of the XQuery interpreter - Programmer: Leonidas Fegaras (fegaras@cse.uta.edu)-- Date: 04/22/2008+- Date: 05/02/2008 - ---------------------------------------------------------------} @@ -11,29 +11,54 @@ module Main where import System.Environment+import qualified Control.Exception import XQueryCompiler(functions)+import XQueryInterpreter(evalInput,xqueryE) import XQuery +version = "0.7.4" -main = do env <- getArgs- putStrLn "HXQ: XQuery Compiler/Interpreter version 0.7.2"- if (length env) > 0 && (head env) == "-help"- then putStrLn ("Functions: "++(foldr (\(f,_,_) r -> f++" "++r) "" functions))- else if (length env) > 1 && (head env) == "-c"- then do query <- readFile (head (tail env))- let qf = map (\c -> if c=='\"' then '\'' else c)- (foldr1 (\a r -> a++" "++r) (lines query))- let pr = "{-# OPTIONS_GHC -fth #-}\nmodule Main where\nimport XQuery\n\nmain = do res <- $(xq \""- ++ qf ++ "\")\n putXSeq res\n"- writeFile "Temp.hs" pr- else if (length env) == 3 && (head env) == "-p"- then do result <- xquery ("doc('"++(head (tail (tail env)))++"')"++(head (tail env)))- putXSeq result- else do result <- if (length env) == 1- then xfile (head env)- else do let readl x = do t <- getLine- if null t then return x else readl (x++" "++t)- putStrLn "Write an XQuery (finish the query with an empty line)"- query <- readl ""- xquery query- putXSeq result++parseEnv :: [String] -> [(String,String)]+parseEnv [] = [("o","Temp.hs")]+parseEnv ("-help":xs) = ("help",""):(parseEnv xs)+parseEnv ("-c":file:xs) = ("c",file):(parseEnv xs)+parseEnv ("-o":file:xs) = ("o",file):(parseEnv xs)+parseEnv ("-p":query:file:xs) = ("p","doc('"++file++"')"++query):(parseEnv xs)+parseEnv (('-':x):_) = error ("Unrecognized option -"++x++". Use -help.")+parseEnv (file:xs) = ("r",file):(parseEnv xs)+++main = do putStrLn ("HXQ: XQuery Interpreter version "++version++". Use -help for help.")+ senv <- getArgs+ let env = parseEnv senv+ Just system_path = lookup "ghc" env+ Just hxq_path = lookup "hxq" env+ case lookup "help" env of+ Just _ -> do putStrLn "Command line options and files:"+ putStrLn " xquery-file interpret the XQuery in xquery-file"+ putStrLn " -c xquery-file compile the XQuery in xquery-file into Haskell code"+ putStrLn " -o haskell-file set the Haskell file for -c (default is Temp.hs)"+ putStrLn " -p XPath-query xml-file interpret the XPath query against the xml-file"+ putStrLn "Without options, it reads and interprets the input:"+ putStrLn " The input may be an XQuery or a declare variable or function"+ putStrLn " To write an XQuery in multiple lines, wrap it in {}"+ putStrLn ("Functions: "++(foldr (\(f,_,_) r -> f++" "++r) "" functions))+ _ -> case lookup "c" env of+ Just file -> do query <- readFile file+ let qf = map (\c -> if c=='\"' then '\'' else c)+ (foldr1 (\a r -> a++" "++r) (lines query))+ pr = "{-# OPTIONS_GHC -fth #-}\nmodule Main where\nimport XQuery\n\nmain = do res <- $(xq \""+ ++ qf ++ "\")\n putXSeq res\n"+ Just ofile = lookup "o" env+ writeFile ofile pr+ _ -> case lookup "r" env of+ Just file -> do result <- xfile file+ putXSeq result+ _ -> case lookup "p" env of+ Just query -> do result <- xquery query+ putXSeq result+ _ -> evalInput (\s vs fs-> Control.Exception.catch (do (result,nvs,nfs) <- xqueryE s vs fs+ putXSeq result+ return (nvs,nfs))+ (\e -> do putStrLn (show e); return (vs,fs))) [] []
Makefile view
@@ -1,9 +1,15 @@ hxml = hxml-0.2-options = -O2+options = -O2 -fvia-C +# xquery interpreter xquery: XQueryParser.hs XQueryCompiler.hs XQueryInterpreter.hs XQuery.hs Main.hs ghc $(options) -i$(hxml) --make Main.hs -o xquery +# on-the-fly compiler: unstable; use xquery instead+hxqc: XQueryParser.hs XQueryCompiler.hs XQueryInterpreter.hs XQuery.hs HXQ.hs+ ghc $(options) -i$(hxml) -package ghc --make HXQ.hs -o hxqc++# generate the XQuery parser using happy XQueryParser.hs: XQueryParser.y happy -g -a -c XQueryParser.y @@ -15,18 +21,21 @@ ghc $(options) -i$(hxml) --make Test2.hs -o test2 time ./test2 +RTS -H20m -M20m +# get in the ghci interpreter and load HXQ ghci: XQueryParser.hs ghci -fth -i$(hxml) XQuery.hs +# heap profile of a simple XQuery against dblp.xml profile: XQueryParser.hs ghc -O2 -i$(hxml) -prof -auto-all --make profile.hs -o a ./a +RTS -hy -p -H20m hp2ps -color a.hp +# create the cabal distribution cabal: clean XQueryParser.hs- runhaskell Setup.lhs configure --prefix=$(HOME)+ runhaskell Setup.lhs configure --ghc --user --prefix=$(HOME) runhaskell Setup.lhs build runhaskell Setup.lhs sdist clean:- /bin/rm -f *~ data/*~ *.o *.hi $(hxml)/*.o $(hxml)/*.hi XQueryParser.hs *.stat *.prof *.ps *.aux *.hp xquery test1 test2 Temp.hs a.out a+ /bin/rm -f *~ data/*~ *.o *.hi $(hxml)/*.o $(hxml)/*.hi XQueryParser.hs *.stat *.prof *.ps *.aux *.hp hxq hxqc test1 test2 Temp.hs a.out a
XQuery.hs view
@@ -4,7 +4,7 @@ - Programmer: Leonidas Fegaras - Email: fegaras@cse.uta.edu - Web: http://lambda.uta.edu/-- Creation: 03/22/08, last update: 03/23/08+- Creation: 03/22/08, last update: 05/01/08 - - Copyright (c) 2008 by Leonidas Fegaras, the University of Texas at Arlington. All rights reserved. - This material is provided as is, with absolutely no warranty expressed or implied.@@ -20,5 +20,6 @@ XTree(..), XSeq, xq, xe, cq, xquery, xfile, putXSeq ) where +import XTree import XQueryCompiler import XQueryInterpreter
XQueryCompiler.hs view
@@ -4,7 +4,7 @@ - Programmer: Leonidas Fegaras - Email: fegaras@cse.uta.edu - Web: http://lambda.uta.edu/-- Creation: 02/15/08, last update: 04/23/08+- Creation: 02/15/08, last update: 05/02/08 - - Copyright (c) 2008 by Leonidas Fegaras, the University of Texas at Arlington. All rights reserved. - This material is provided as is, with absolutely no warranty expressed or implied.@@ -14,96 +14,18 @@ --------------------------------------------------------------------------------------} -{-# OPTIONS_GHC -fth -funbox-strict-fields #-}+{-# OPTIONS_GHC -fth #-} module XQueryCompiler where import Char(isDigit) import List(sortBy)-import System.IO import Language.Haskell.TH-import XMLParse(XMLEvent(..),parseDocument)+import XMLParse(parseDocument) import HXML(AttList) import XQueryParser---{--------------- XML Trees (rose trees) ----------------------------------------------}--type Tag = String----- A DOM-like tree to represent XML data--- Int in XElem is the preorder numbering used for document order-data XTree = XElem !Tag !AttList !Int [XTree]- | XText !String- | XInt !Int- | XFloat !Float- | XBool !Bool- | XPI Tag String -- processing instruction- | XGERef Tag -- general entity reference- | XComment String -- comment- | XError String -- error report- deriving Eq--type XSeq = [XTree]---showAL :: AttList -> String-showAL = foldr(\(a,v) r -> " "++a++"=\""++v++"\""++r) []--showXT :: XTree -> Bool -> String-showXT e pad- = case e of- XElem tag al _ [] -> "<"++tag++(showAL al)++"/>"- XElem tag al _ xs -> "<"++tag++(showAL al)++">"++(showXS xs)++"</"++tag++">"- XText text -> text- XInt n -> p++(show n)- XFloat n -> p++(show n)- XBool v -> p++(if v then "true" else "false")- XComment s -> "<!--"++s++"-->"- XPI n s -> "<?"++n++" "++s++">"- XError s -> error s- _ -> ""- where p = if pad then " " else ""--showXS :: XSeq -> String-showXS [] = ""-showXS (x:xs) = (showXT x False) ++ (concatMap (\x -> showXT x True) xs)--instance Show XTree where- show t = showXT t False----- print an XSeq without waiting-putXSeq :: XSeq -> IO ()-putXSeq xs = hSetBuffering stdout NoBuffering >> putStrLn (showXS xs)---{--------------- Build the rose tree from the XML stream ----------------------------}---type Stream = [XMLEvent]----- lazily materialize the SAX stream into a DOM tree-materialize :: Stream -> XTree-materialize stream = XElem "document" [] 1 [head (filter (\x -> case x of XElem _ _ _ _ -> True; _ -> False)- ((\(x,_,_)->x) (ml stream 2)))]- where m ((TextEvent t):xs) i = (XText t,xs,i)- m ((EmptyEvent n atts):xs) i = (XElem n atts i [],xs,i+1)- m ((StartEvent n atts):xs) i = let (el,xs',i') = ml xs (i+1)- in (XElem n atts i el,xs',i')- m ((PIEvent n s):xs) i = (XPI n s,xs,i)- m ((CommentEvent s):xs) i = (XComment s,xs,i)- m ((GERefEvent n):xs) i = (XGERef n,xs,i)- m ((ErrorEvent s):xs) i = (XError s,xs,i)- m (_:xs) i = (XError "unrecognized XML event",xs,i)- m [] i = (XError "unbalanced tags",[],i)- ml [] i = ([],[],i)- ml ((EndEvent n):xs) i = ([],xs,i)- ml xs i = let (e,xs',i') = m xs i- (el,xs'',i'') = ml xs' i'- in (e:el,xs'',i'')+import XTree+import XQueryOptimizer {--------------- XPath Steps ---------------------------------------------------------}@@ -129,6 +51,19 @@ descendant_step m _ = [] +-- It's like //* but has tagged children, which are derived statically+-- After examing 100 children it gives up: this avoids space leaks+descendant_any_with_tagged_children :: [Tag] -> XTree -> XSeq+descendant_any_with_tagged_children tags (x@(XElem t _ _ cs))+ | all (\tag -> foldr (\b s -> case b of+ (XElem k _ _ _) -> s || k == tag+ _ -> s) False (take 100 cs)) tags+ = x:(concatMap (descendant_any_with_tagged_children tags) cs)+descendant_any_with_tagged_children tags (XElem t _ _ cs)+ = concatMap (descendant_any_with_tagged_children tags) cs+descendant_any_with_tagged_children tags _ = []++ -- XPath step /@attr or /@* attribute_step :: Tag -> XTree -> XSeq attribute_step m x@@ -223,7 +158,7 @@ contains (_:xs) ys = contains xs ys contains [] ys = False -distinct :: XSeq -> XSeq+distinct :: Eq a => [a] -> [a] distinct = foldl (\r a -> if elem a r then r else r++[a]) [] arithmetic :: (Float -> Float -> Float) -> XTree -> XTree -> XTree@@ -379,109 +314,6 @@ in appE fn (tupE args) -{------------ Preprocessing, Remove Backward Steps and Optimize ------------------------------------}----- collect attribute constructions inside element constructions-collect_attributes :: Ast -> (Ast,[Ast])-collect_attributes (Ast "attribute_construction" [attr,value])- = (Ast "call" [Avar "empty"],[Ast "pair" [attr,value]])-collect_attributes (Ast "call" [Avar "concatenate",x,y])- = let (cx,ax) = collect_attributes x- (cy,ay) = collect_attributes y- in (Ast "call" [Avar "concatenate",cx,cy],ax++ay)-collect_attributes (Ast "step" (e:es))- = let (ce,ae) = collect_attributes e- in (Ast "step" (ce:es),ae)-collect_attributes e = (e,[])----- does the expression contain a $var/.. ?-parentOfVar :: Ast -> String -> Bool-parentOfVar (Ast "step" [Ast "parent_step" [Ast "step" [Avar x]]]) var = x == var-parentOfVar (Ast "let" [Avar v,s,_]) var | var == v = parentOfVar s var-parentOfVar (Ast "for" [Avar v,Avar i,s,_]) var | var == v || var == i = parentOfVar s var-parentOfVar (Ast _ args) var = or (map (\x -> parentOfVar x var) args)-parentOfVar _ _ = False----- replace $var/.. with $nvar-replaceParentOfVar :: Ast -> String -> String -> Ast-replaceParentOfVar (Ast "step" [Ast "parent_step" [Ast "step" [Avar x]]]) var nvar- | x == var- = Avar nvar-replaceParentOfVar (Ast "let" [Avar v,s,b]) var nvar | var == v- = Ast "let" [Avar v,replaceParentOfVar s var nvar,b]-replaceParentOfVar (Ast "for" [Avar v,Avar i,s,b]) var nvar | var == v || var == i- = Ast "for" [Avar v,Avar i,replaceParentOfVar s var nvar,b]-replaceParentOfVar (Ast f args) var nvar- = Ast f (map (\x -> replaceParentOfVar x var nvar) args)-replaceParentOfVar e _ _ = e----- Rules to extract the parent of an XQuery expression--- For every XQuery x and predicates p1 ... pn and for s in [tag,*,@attr]:--- x/s[p1]...[pn]/.. -> x[s[p1]...[pn]]--- x//s[p1]...[pn]/.. -> x//*[s[p1]...[pn]]-removeParent :: Ast -> (Ast,Ast,Bool,Ast)-removeParent (Ast "predicate" [c,x])- = let (nx,cond,childp,tag) = removeParent x- in (Ast "predicate" [c,nx],cond,childp,tag)-removeParent (Ast "step" ((Ast "child_step" [tag,x]):preds))- = (Ast "step" ((Ast "child_step" [tag,Avar "."]):preds),x,True,tag)-removeParent (Ast "step" ((Ast "descendant_step" [tag,x]):preds))- = (Ast "step" ((Ast "child_step" [tag,Avar "."]):preds),- Ast "step" ((Ast "descendant_step" [Astring "*",x]):preds),True,tag)-removeParent (Ast "step" ((Ast "attribute_step" [tag,x]):preds))- = (Ast "step" ((Ast "attribute_step" [tag,Avar "."]):preds),x,False,tag)-removeParent (Ast "step" ((Ast "descendant_attribute_step" [tag,x]):preds))- = (Ast "step" ((Ast "attribute_step" [tag,Avar "."]):preds),- Ast "step" ((Ast "descendant_step" [Astring "*",x]):preds),False,tag)-removeParent (Ast "step" (x:xs))- = let (nx,cond,childp,tag) = removeParent x- in (Ast "step" (nx:xs),cond,childp,tag)-removeParent e = error ("Cannot remove this parent step "++(show e))---optimize :: Ast -> Ast--- must be done bottom-up: /../..-optimize (Ast "step" [Ast "parent_step" [Ast "step" [Ast "parent_step" x]]])- = let nx = optimize (Ast "step" [Ast "parent_step" x])- in optimize (Ast "step" [Ast "parent_step" [nx]])--- get rid of a parent step-optimize (Ast "step" [Ast "parent_step" [x]])- = let (nx,cond,_,_) = removeParent x- in Ast "predicate" [optimize nx,optimize cond]--- remove $var/.. in a let-FLWOR-optimize (Ast "let" [Avar var,source,body])- | parentOfVar body var- = let (nx,cond,childp,tag) = removeParent source- in optimize (Ast "let" [Avar (var++"_parent"),Ast "predicate" [nx,cond],- Ast "let" [Avar var,- Ast "step" [ Ast (if childp- then "child_step"- else "attribute_step")- [tag,Avar (var++"_parent")] ],- replaceParentOfVar body var (var++"_parent")]])--- remove $var/.. from a for-FLWOR-optimize (Ast "for" [Avar var,Avar "$",source,body])- | parentOfVar body var- = let (nx,cond,childp,tag) = removeParent source- in optimize (Ast "for" [Avar (var++"_parent"),Avar "$",Ast "predicate" [nx,cond],- Ast "for" [Avar var,Avar "$",- Ast "step" [ Ast (if childp- then "child_step"- else "attribute_step")- [tag,Avar (var++"_parent")] ],- replaceParentOfVar body var (var++"_parent")]])-optimize (Ast "element_construction" [tag,content])- = let (nc,attrs) = collect_attributes content- in optimize (Ast "construction" [tag,Ast "attributes" attrs,nc])--- needs more rules-optimize (Ast n args) = Ast n (map optimize args)-optimize e = e-- {------------ Compiler ---------------------------------------------------------------} @@ -591,11 +423,11 @@ Ast "step" [Ast "child_step" [tag, Avar "."]] | effective_axis /= "" -> compile (Ast "step" [Ast effective_axis [tag, Avar "."]]) context position last ""- Ast "step" [Ast path_step [Astring tag,body]]- | memV path_step paths+ Ast "step" ((Ast "descendant_any" (body:tags)):predicates) -> let bc = compile body context position last effective_axis- tc = litE (stringL tag)- in [| foldr (\a s -> ($(findV path_step paths) $tc a)++s) [] $bc |]+ ts = listE (map (\(Avar tag) -> litE (stringL tag)) tags)+ in [| foldr (\x r -> $(compilePredicates predicates [| descendant_any_with_tagged_children $ts x |] True)++r)+ [] $bc |] Ast "step" ((Ast path_step [Astring tag,body]):predicates) | memV path_step paths -> let bc = compile body context position last effective_axis
XQueryInterpreter.hs view
@@ -4,7 +4,7 @@ - Programmer: Leonidas Fegaras - Email: fegaras@cse.uta.edu - Web: http://lambda.uta.edu/-- Creation: 03/22/08, last update: 04/20/08+- Creation: 03/22/08, last update: 05/02/08 - - Copyright (c) 2008 by Leonidas Fegaras, the University of Texas at Arlington. All rights reserved. - This material is provided as is, with absolutely no warranty expressed or implied.@@ -16,11 +16,15 @@ {-# OPTIONS_GHC -fth #-} + module XQueryInterpreter where import List(sortBy) import XMLParse(parseDocument)+import System.Console.Readline import XQueryParser+import XTree+import XQueryOptimizer import XQueryCompiler @@ -94,10 +98,10 @@ Ast "step" [Ast "child_step" [tag, Avar "."]] | effective_axis /= "" -> eval (Ast "step" [Ast effective_axis [tag, Avar "."]]) context position last "" env fncs- Ast "step" [Ast path_step [Astring tag,body]]- | memV path_step pathFunctions- -> foldr (\x r -> ((findV path_step pathFunctions) tag x)++r)- [] (eval body context position last effective_axis env fncs)+ Ast "step" ((Ast "descendant_any" (body:tags)):predicates)+ -> let ts = map (\(Avar tag) -> tag) tags+ in foldr (\x r -> (applyPredicates predicates (descendant_any_with_tagged_children ts x) True env fncs)++r)+ [] (eval body context position last effective_axis env fncs) Ast "step" ((Ast path_step [Astring tag,body]):predicates) | memV path_step pathFunctions -> foldr (\x r -> (applyPredicates predicates ((findV path_step pathFunctions) tag x) True env fncs)++r)@@ -114,7 +118,7 @@ then f (map (\x -> eval x context position last effective_axis env fncs) args) else error ("Wrong number of arguments in system call: "++fname) _ -> case filter (\(n,_,_) -> n == fname) fncs of- [(_,params,body)] -> if (length params) == (length args)+ (_,params,body):_ -> if (length params) == (length args) then eval body context undefv2 undefv3 "" ((zipWith (\p a -> (p,eval a context position last effective_axis env fncs)) params args)++env) fncs@@ -158,25 +162,58 @@ _ -> error ("Illegal XQuery: "++(show e)) +-- evaluate from input continuously+evalInput :: (String -> Environment -> Functions -> IO(Environment,Functions)) -> Environment -> Functions -> IO ()+evalInput eval vs fs+ = do let oneline prompt = do line <- readline prompt+ case line of+ Nothing -> return "quit"+ Just t -> if t == ""+ then oneline prompt+ else return t+ readlines x = do line <- oneline ": "+ if last line == '}'+ then return (x++" "++(init line))+ else if line == "quit"+ then return line+ else readlines (x++" "++line)+ line <- oneline "> "+ stmt <- if head line == '{'+ then if last line == '}'+ then return (init (tail line))+ else readlines (tail line)+ else return line+ if stmt == "quit"+ then putStrLn "Bye!"+ else do addHistory stmt+ (nvs,nfs) <- eval (map (\c -> if c=='\"' then '\'' else c) stmt) vs fs+ evalInput eval nvs nfs+++xqueryE :: String -> Environment -> Functions -> IO (XSeq,Environment,Functions)+xqueryE query variables functions+ = let asts = parse (scan query)+ fncs = foldr (\e r -> case e of+ Ast "function" ((Avar f):b:args) -> (f,map (\(Avar v) -> v) args,optimize b):r+ _ -> r) functions asts+ vars = foldl (\r e -> case e of+ Ast "variable" [Avar v,u] -> (v,eval (optimize u) undefv1 undefv2 undefv3 "" r fncs):r+ _ -> r) variables asts+ exprp e = case e of Ast f _ | elem f ["function","variable"] -> True; _ -> False+ (ast,_,ns) = getDocs (concatenateAll (dropWhile exprp asts)) 0+ in do env <- foldr (\(n,s) r -> case s of+ Astring file -> do doc <- readFile file+ env <- r+ return (("_doc"++(show n),[materialize (parseDocument doc)]):env)+ Aint m -> do env <- r+ return (("_doc"++(show n),findV ("_doc"++(show m)) env):env))+ (return []) ns+ return (eval (optimize ast) undefv1 undefv2 undefv3 "" (env++vars) fncs,vars,fncs)++ -- the XQuery interpreter xquery :: String -> IO XSeq-xquery query- = do let asts = parse (scan query)- fncs = foldr (\e r -> case e of- Ast "function" ((Avar f):b:args) -> (f,map (\(Avar v) -> v) args,optimize b):r- _ -> r) [] asts- vars = foldl (\r e -> case e of- Ast "variable" [Avar v,u] -> (v,eval (optimize u) undefv1 undefv2 undefv3 "" r fncs):r- _ -> r) [] asts- (ast,_,ns) = getDocs (last asts) 0- env <- foldr (\(n,s) r -> case s of- Astring file -> do doc <- readFile file- env <- r- return (("_doc"++(show n),[materialize (parseDocument doc)]):env)- Aint m -> do env <- r- return (("_doc"++(show n),findV ("_doc"++(show m)) env):env))- (return []) ns- return (eval (optimize ast) undefv1 undefv2 undefv3 "" (env++vars) fncs)+xquery query = do (u,_,_) <- xqueryE query [] []; return u -- Read an XQuery fom a file and run it
+ XQueryOptimizer.hs view
@@ -0,0 +1,156 @@+{-------------------------------------------------------------------------------------+-+- Preprocess abstract syntax trees, remove backward steps and optimize+- Programmer: Leonidas Fegaras+- Email: fegaras@cse.uta.edu+- Web: http://lambda.uta.edu/+- Creation: 05/01/08, last update: 05/01/08+- +- Copyright (c) 2008 by Leonidas Fegaras, the University of Texas at Arlington. All rights reserved.+- This material is provided as is, with absolutely no warranty expressed or implied.+- Any use is at your own risk. Permission is hereby granted to use or copy this program+- for any purpose, provided the above notices are retained on all copies.+-+--------------------------------------------------------------------------------------}+++module XQueryOptimizer(optimize) where++import XQueryParser(Ast(..))+import XTree+++paths = [ "child_step", "descendant_step", "attribute_step", "attribute_descendant_step" ]+++distinct :: Eq a => [a] -> [a]+distinct = foldl (\r a -> if elem a r then r else r++[a]) []+++-- collect attribute constructions inside element constructions+collect_attributes :: Ast -> (Ast,[Ast])+collect_attributes (Ast "attribute_construction" [attr,value])+ = (Ast "call" [Avar "empty"],[Ast "pair" [attr,value]])+collect_attributes (Ast "call" [Avar "concatenate",x,y])+ = let (cx,ax) = collect_attributes x+ (cy,ay) = collect_attributes y+ in (Ast "call" [Avar "concatenate",cx,cy],ax++ay)+collect_attributes (Ast "step" (e:es))+ = let (ce,ae) = collect_attributes e+ in (Ast "step" (ce:es),ae)+collect_attributes e = (e,[])+++-- does the expression contain a $var/.. ?+parentOfVar :: Ast -> String -> Bool+parentOfVar (Ast "step" [Ast "parent_step" [Ast "step" [Avar x]]]) var = x == var+parentOfVar (Ast "let" [Avar v,s,_]) var | var == v = parentOfVar s var+parentOfVar (Ast "for" [Avar v,Avar i,s,_]) var | var == v || var == i = parentOfVar s var+parentOfVar (Ast _ args) var = or (map (\x -> parentOfVar x var) args)+parentOfVar _ _ = False+++-- replace $var/.. with $nvar+replaceParentOfVar :: Ast -> String -> String -> Ast+replaceParentOfVar (Ast "step" [Ast "parent_step" [Ast "step" [Avar x]]]) var nvar+ | x == var+ = Avar nvar+replaceParentOfVar (Ast "let" [Avar v,s,b]) var nvar | var == v+ = Ast "let" [Avar v,replaceParentOfVar s var nvar,b]+replaceParentOfVar (Ast "for" [Avar v,Avar i,s,b]) var nvar | var == v || var == i+ = Ast "for" [Avar v,Avar i,replaceParentOfVar s var nvar,b]+replaceParentOfVar (Ast f args) var nvar+ = Ast f (map (\x -> replaceParentOfVar x var nvar) args)+replaceParentOfVar e _ _ = e+++-- Rules to extract the parent of an XQuery expression+-- For every XQuery x and predicates p1 ... pn and for s in [tag,*,@attr]:+-- x/s[p1]...[pn]/.. -> x[s[p1]...[pn]]+-- x//s[p1]...[pn]/.. -> x//*[s[p1]...[pn]]+removeParent :: Ast -> (Ast,Ast,Bool,Ast)+removeParent (Ast "predicate" [c,x])+ = let (nx,cond,childp,tag) = removeParent x+ in (Ast "predicate" [c,nx],cond,childp,tag)+removeParent (Ast "step" ((Ast "child_step" [tag,x]):preds))+ = (Ast "step" ((Ast "child_step" [tag,Avar "."]):preds),x,True,tag)+removeParent (Ast "step" ((Ast "descendant_step" [tag,x]):preds))+ = (Ast "step" ((Ast "child_step" [tag,Avar "."]):preds),+ Ast "step" ((Ast "descendant_step" [Astring "*",x]):preds),True,tag)+removeParent (Ast "step" ((Ast "attribute_step" [tag,x]):preds))+ = (Ast "step" ((Ast "attribute_step" [tag,Avar "."]):preds),x,False,tag)+removeParent (Ast "step" ((Ast "descendant_attribute_step" [tag,x]):preds))+ = (Ast "step" ((Ast "attribute_step" [tag,Avar "."]):preds),+ Ast "step" ((Ast "descendant_step" [Astring "*",x]):preds),False,tag)+removeParent (Ast "step" (x:xs))+ = let (nx,cond,childp,tag) = removeParent x+ in (Ast "step" (nx:xs),cond,childp,tag)+removeParent e = error ("Cannot remove this parent step "++(show e))+++tagged_children :: String -> Ast -> [Tag]+tagged_children context (Ast "step" ((Ast "child_step" [Astring tag,Avar "."]):_))+ | context == "."+ = [tag]+tagged_children context (Ast "step" ((Ast "child_step" [Astring tag,Ast "step" ((Avar v):_)]):_))+ | v == context+ = [tag]+tagged_children _ (Ast "step" ((Ast step _):_))+ | elem step paths = []+tagged_children context (Ast _ xs) = concatMap (tagged_children context) xs+tagged_children _ _ = []+++optimize :: Ast -> Ast+-- must be done bottom-up: /../..+optimize (Ast "step" [Ast "parent_step" [Ast "step" [Ast "parent_step" x]]])+ = let nx = optimize (Ast "step" [Ast "parent_step" x])+ in optimize (Ast "step" [Ast "parent_step" [nx]])+-- get rid of a parent step+optimize (Ast "step" [Ast "parent_step" [x]])+ = let (nx,cond,_,_) = removeParent x+ in Ast "predicate" [optimize nx,optimize cond]+-- remove $var/.. in a let-FLWOR+optimize (Ast "let" [Avar var,source,body])+ | parentOfVar body var+ = let (nx,cond,childp,tag) = removeParent source+ in optimize (Ast "let" [Avar (var++"_parent"),Ast "predicate" [nx,cond],+ Ast "let" [Avar var,+ Ast "step" [ Ast (if childp+ then "child_step"+ else "attribute_step")+ [tag,Avar (var++"_parent")] ],+ replaceParentOfVar body var (var++"_parent")]])+-- remove $var/.. from a for-FLWOR+optimize (Ast "for" [Avar var,Avar "$",source,body])+ | parentOfVar body var+ = let (nx,cond,childp,tag) = removeParent source+ in optimize (Ast "for" [Avar (var++"_parent"),Avar "$",Ast "predicate" [nx,cond],+ Ast "for" [Avar var,Avar "$",+ Ast "step" [ Ast (if childp+ then "child_step"+ else "attribute_step")+ [tag,Avar (var++"_parent")] ],+ replaceParentOfVar body var (var++"_parent")]])+-- pull out attributes from a general element construction+optimize (Ast "element_construction" [tag,content])+ = let (nc,attrs) = collect_attributes content+ in optimize (Ast "construction" [tag,Ast "attributes" attrs,nc])+-- if //* collect all children tagnames to use descendant_any_with_tagged_children+optimize (Ast "for" [Avar var,i,Ast "step" [Ast "step" ((Ast "descendant_step" [Astring "*",path]):preds)],body])+ | not (null ((tagged_children var body))) || any (not . null . (tagged_children ".")) preds+ = let ctags = distinct ((tagged_children var body)++(concatMap (tagged_children ".") preds))+ tags = map Avar ctags+ in optimize (Ast "for" [Avar var,i,Ast "step" [Ast "step" ((Ast "descendant_any" (path:tags)):preds)],body])+optimize (Ast "step" ((Ast "child_step" [Astring tag,Ast "step" ((Ast "descendant_step" [Astring "*",path]):preds)]):preds2))+ = let ctags = distinct(tag:(concatMap (tagged_children ".") preds))+ tags = map Avar ctags+ in optimize (Ast "step" ((Ast "child_step" [Astring tag,Ast "step" ((Ast "descendant_any" (path:tags)):preds)]):preds2))+optimize (Ast "step" ((Ast "descendant_step" [Astring "*",path]):preds))+ | any (not . null . (tagged_children ".")) preds+ = let ctags = distinct (concatMap (tagged_children ".") preds)+ tags = map Avar ctags+ in optimize (Ast "step" ((Ast "descendant_any" (path:tags)):preds))+-- needs more rules+optimize (Ast n args) = Ast n (map optimize args)+optimize e = e
XQueryParser.hs view
@@ -26,1686 +26,1753 @@ happyOut4 :: (HappyAbsSyn ) -> ([ Ast ]) happyOut4 x = unsafeCoerce# x {-# INLINE happyOut4 #-}-happyIn5 :: ([ Ast ]) -> (HappyAbsSyn )-happyIn5 x = unsafeCoerce# x-{-# INLINE happyIn5 #-}-happyOut5 :: (HappyAbsSyn ) -> ([ Ast ])-happyOut5 x = unsafeCoerce# x-{-# INLINE happyOut5 #-}-happyIn6 :: (Ast) -> (HappyAbsSyn )-happyIn6 x = unsafeCoerce# x-{-# INLINE happyIn6 #-}-happyOut6 :: (HappyAbsSyn ) -> (Ast)-happyOut6 x = unsafeCoerce# x-{-# INLINE happyOut6 #-}-happyIn7 :: (Ast) -> (HappyAbsSyn )-happyIn7 x = unsafeCoerce# x-{-# INLINE happyIn7 #-}-happyOut7 :: (HappyAbsSyn ) -> (Ast)-happyOut7 x = unsafeCoerce# x-{-# INLINE happyOut7 #-}-happyIn8 :: ([ Ast ]) -> (HappyAbsSyn )-happyIn8 x = unsafeCoerce# x-{-# INLINE happyIn8 #-}-happyOut8 :: (HappyAbsSyn ) -> ([ Ast ])-happyOut8 x = unsafeCoerce# x-{-# INLINE happyOut8 #-}-happyIn9 :: (Ast -> Ast) -> (HappyAbsSyn )-happyIn9 x = unsafeCoerce# x-{-# INLINE happyIn9 #-}-happyOut9 :: (HappyAbsSyn ) -> (Ast -> Ast)-happyOut9 x = unsafeCoerce# x-{-# INLINE happyOut9 #-}-happyIn10 :: (Ast -> Ast) -> (HappyAbsSyn )-happyIn10 x = unsafeCoerce# x-{-# INLINE happyIn10 #-}-happyOut10 :: (HappyAbsSyn ) -> (Ast -> Ast)-happyOut10 x = unsafeCoerce# x-{-# INLINE happyOut10 #-}-happyIn11 :: (Ast -> Ast) -> (HappyAbsSyn )-happyIn11 x = unsafeCoerce# x-{-# INLINE happyIn11 #-}-happyOut11 :: (HappyAbsSyn ) -> (Ast -> Ast)-happyOut11 x = unsafeCoerce# x-{-# INLINE happyOut11 #-}-happyIn12 :: (Ast -> Ast) -> (HappyAbsSyn )-happyIn12 x = unsafeCoerce# x-{-# INLINE happyIn12 #-}-happyOut12 :: (HappyAbsSyn ) -> (Ast -> Ast)-happyOut12 x = unsafeCoerce# x-{-# INLINE happyOut12 #-}-happyIn13 :: (( Ast -> Ast, Ast -> Ast )) -> (HappyAbsSyn )-happyIn13 x = unsafeCoerce# x-{-# INLINE happyIn13 #-}-happyOut13 :: (HappyAbsSyn ) -> (( Ast -> Ast, Ast -> Ast ))-happyOut13 x = unsafeCoerce# x-{-# INLINE happyOut13 #-}-happyIn14 :: (( [ Ast ], [ Ast ] )) -> (HappyAbsSyn )-happyIn14 x = unsafeCoerce# x-{-# INLINE happyIn14 #-}-happyOut14 :: (HappyAbsSyn ) -> (( [ Ast ], [ Ast ] ))-happyOut14 x = unsafeCoerce# x-{-# INLINE happyOut14 #-}-happyIn15 :: (Ast) -> (HappyAbsSyn )-happyIn15 x = unsafeCoerce# x-{-# INLINE happyIn15 #-}-happyOut15 :: (HappyAbsSyn ) -> (Ast)-happyOut15 x = unsafeCoerce# x-{-# INLINE happyOut15 #-}-happyIn16 :: (Ast) -> (HappyAbsSyn )-happyIn16 x = unsafeCoerce# x-{-# INLINE happyIn16 #-}-happyOut16 :: (HappyAbsSyn ) -> (Ast)-happyOut16 x = unsafeCoerce# x-{-# INLINE happyOut16 #-}-happyIn17 :: (Ast) -> (HappyAbsSyn )-happyIn17 x = unsafeCoerce# x-{-# INLINE happyIn17 #-}-happyOut17 :: (HappyAbsSyn ) -> (Ast)-happyOut17 x = unsafeCoerce# x-{-# INLINE happyOut17 #-}-happyIn18 :: ([ Ast ]) -> (HappyAbsSyn )-happyIn18 x = unsafeCoerce# x-{-# INLINE happyIn18 #-}-happyOut18 :: (HappyAbsSyn ) -> ([ Ast ])-happyOut18 x = unsafeCoerce# x-{-# INLINE happyOut18 #-}-happyIn19 :: ([ Ast ]) -> (HappyAbsSyn )-happyIn19 x = unsafeCoerce# x-{-# INLINE happyIn19 #-}-happyOut19 :: (HappyAbsSyn ) -> ([ Ast ])-happyOut19 x = unsafeCoerce# x-{-# INLINE happyOut19 #-}-happyIn20 :: ([ Ast ]) -> (HappyAbsSyn )-happyIn20 x = unsafeCoerce# x-{-# INLINE happyIn20 #-}-happyOut20 :: (HappyAbsSyn ) -> ([ Ast ])-happyOut20 x = unsafeCoerce# x-{-# INLINE happyOut20 #-}-happyIn21 :: (Ast) -> (HappyAbsSyn )-happyIn21 x = unsafeCoerce# x-{-# INLINE happyIn21 #-}-happyOut21 :: (HappyAbsSyn ) -> (Ast)-happyOut21 x = unsafeCoerce# x-{-# INLINE happyOut21 #-}-happyIn22 :: (Ast -> Ast) -> (HappyAbsSyn )-happyIn22 x = unsafeCoerce# x-{-# INLINE happyIn22 #-}-happyOut22 :: (HappyAbsSyn ) -> (Ast -> Ast)-happyOut22 x = unsafeCoerce# x-{-# INLINE happyOut22 #-}-happyIn23 :: (Ast -> Ast) -> (HappyAbsSyn )-happyIn23 x = unsafeCoerce# x-{-# INLINE happyIn23 #-}-happyOut23 :: (HappyAbsSyn ) -> (Ast -> Ast)-happyOut23 x = unsafeCoerce# x-{-# INLINE happyOut23 #-}-happyIn24 :: (String -> Ast -> [ Ast ]) -> (HappyAbsSyn )-happyIn24 x = unsafeCoerce# x-{-# INLINE happyIn24 #-}-happyOut24 :: (HappyAbsSyn ) -> (String -> Ast -> [ Ast ])-happyOut24 x = unsafeCoerce# x-{-# INLINE happyOut24 #-}-happyIn25 :: (String -> Ast -> Ast) -> (HappyAbsSyn )-happyIn25 x = unsafeCoerce# x-{-# INLINE happyIn25 #-}-happyOut25 :: (HappyAbsSyn ) -> (String -> Ast -> Ast)-happyOut25 x = unsafeCoerce# x-{-# INLINE happyOut25 #-}-happyIn26 :: (String -> Ast -> Ast) -> (HappyAbsSyn )-happyIn26 x = unsafeCoerce# x-{-# INLINE happyIn26 #-}-happyOut26 :: (HappyAbsSyn ) -> (String -> Ast -> Ast)-happyOut26 x = unsafeCoerce# x-{-# INLINE happyOut26 #-}-happyInTok :: Token -> (HappyAbsSyn )-happyInTok x = unsafeCoerce# x-{-# INLINE happyInTok #-}-happyOutTok :: (HappyAbsSyn ) -> Token-happyOutTok x = unsafeCoerce# x-{-# INLINE happyOutTok #-}---happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\xc9\x00\x05\x01\x00\x00\xeb\x02\xf0\xff\x00\x00\x00\x00\xfb\xff\x00\x00\xfd\xff\x00\x00\x00\x00\x64\x01\x64\x01\x05\x01\x8d\x00\x05\x01\x05\x01\x00\x00\x6b\x01\x05\x01\x61\x01\x61\x01\x01\x00\xfe\xff\x66\x00\x99\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x00\x3f\x01\x72\x00\x47\x01\x06\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x05\x01\x00\x00\x46\x00\xfd\xff\x0c\x01\x05\x01\x39\x01\x0a\x01\x05\x01\x38\x01\x0e\x01\x14\x01\xe7\xff\x10\x01\x00\x00\x04\x01\x00\x00\x00\x00\xeb\x02\x2d\x00\x00\x00\xd1\x01\xeb\xff\xea\xff\x01\x01\x00\x00\x05\x01\x58\x00\x1e\x00\x00\x00\x07\x01\xf5\x00\xf5\x00\x05\x01\xeb\x02\x09\x01\x08\x01\x2a\x01\xf7\x00\x00\x00\xfa\xff\x05\x01\x0f\x00\x02\x00\xec\x00\x00\x00\x00\x00\x13\x01\x66\x00\x3b\x00\x00\x00\x19\x02\x00\x00\xd4\x00\x05\x01\x05\x01\x05\x01\x00\x00\x05\x01\xd8\x00\xfd\x00\x05\x01\xce\x00\xce\x00\x05\x01\x05\x01\x95\x02\x02\x01\x05\x01\x76\x02\xfa\x00\xcf\x00\x24\x00\x00\x00\x5b\x01\x5b\x01\x5b\x01\x20\x03\x5b\x01\x07\x03\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x0f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x20\x01\x20\x01\x38\x03\xcd\x00\xf4\x00\xfc\xff\x05\x01\x00\x00\x00\x00\xe4\x00\x5b\x00\x00\x00\xe1\x00\x59\x00\xeb\x02\xbe\x00\xbb\x00\xeb\x02\x09\x00\xd0\x00\xeb\x02\xf6\x01\xeb\x02\xeb\x02\xde\xff\x00\x00\xdc\x00\x66\x00\xdc\x00\xcb\x00\x56\x00\x00\x00\x05\x01\xa2\x00\x00\x00\x00\x00\x05\x01\x05\x01\xeb\x02\xab\x01\xae\x00\xb6\x00\x53\x00\x00\x00\x00\x00\xc7\x00\x05\x01\x86\x00\x05\x01\x06\x00\x05\x01\x00\x00\x05\x01\x05\x01\x00\x00\x05\x01\x00\x00\x05\x01\x76\x01\x04\x00\x00\x00\xbd\x00\x05\x01\xba\x00\x82\x00\xff\xff\x50\x00\x40\x00\xeb\x02\xeb\x02\xcf\x02\x05\x01\x00\x00\xeb\x02\x94\x00\xeb\x02\x00\x00\x00\x00\x05\x01\x00\x00\x00\x00\x00\x00\xab\x01\x05\x01\xb2\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x01\x57\x02\x77\x00\x38\x02\x00\x00\xeb\x02\x00\x00\x70\x00\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00"#--happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\xa1\x01\xc6\x06\x00\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x00\x00\x00\x00\x6a\x00\x5e\x00\xb9\x06\xfb\x03\xac\x06\x9f\x06\x00\x00\x00\x00\x92\x06\x57\x00\x26\x00\x00\x00\x00\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x00\x85\x06\x78\x06\x6b\x06\x5e\x06\x51\x06\x44\x06\x37\x06\x2a\x06\x1d\x06\x10\x06\x03\x06\xf6\x05\xe9\x05\xdc\x05\xcf\x05\xc2\x05\xb5\x05\xa8\x05\x9b\x05\x8e\x05\x81\x05\x74\x05\x67\x05\x5a\x05\x4d\x05\x40\x05\x33\x05\x26\x05\x00\x00\xe6\x03\x61\x00\x00\x00\x19\x05\x00\x00\x00\x00\x0c\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\xff\x04\xe2\x00\xf3\x00\x00\x00\x8f\x00\x1f\x00\x1b\x00\xf2\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\xd1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x00\xaa\x00\x00\x00\x00\x00\x00\x00\x93\x00\xe5\x04\xd8\x04\xcb\x04\x00\x00\xbe\x04\x00\x00\x00\x00\xb1\x04\x89\x00\x81\x00\xa4\x04\xbc\x03\x00\x00\x00\x00\xa7\x03\x00\x00\x00\x00\x63\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\x00\x00\x00\x00\x00\x00\x67\x00\x97\x04\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\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x92\x03\x00\x00\x00\x00\x00\x00\x7d\x03\x8a\x04\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x04\x69\x00\x70\x04\x00\x00\x63\x04\x00\x00\x56\x04\x49\x04\x00\x00\x70\x03\x00\x00\x5b\x03\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x04\x00\x00\x2a\x00\x19\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x04\x00\x00\x00\x00\x00\x00\x14\x00\x15\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x00\x00\xa1\x00\x00\x00\x00\x00"#--happyDefActions :: HappyAddr-happyDefActions = HappyA# "\x00\x00\x00\x00\x91\xff\x00\x00\xc0\xff\xf0\xff\xf1\xff\x00\x00\xf2\xff\xa1\xff\x96\xff\x94\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x92\xff\x90\xff\xf7\xff\xcf\xff\xce\xff\xd0\xff\x00\x00\xfe\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\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\xfd\xff\x00\x00\xa0\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xff\x00\x00\xcb\xff\xd1\xff\xaf\xff\xd2\xff\xd3\xff\xcd\xff\x00\x00\x8e\xff\x00\x00\x00\x00\x00\x00\x9f\xff\x9d\xff\x00\x00\x00\x00\x00\x00\xb4\xff\xbe\xff\x00\x00\x00\x00\x00\x00\xc1\xff\xc8\xff\xc9\xff\x00\x00\x00\x00\xaa\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\xff\xac\xff\x9b\xff\x00\x00\x00\x00\x97\xff\x00\x00\x9c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x8f\xff\x00\x00\xae\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\xff\x00\x00\x8c\xff\xd4\xff\xd5\xff\xd6\xff\xd7\xff\xd8\xff\xd9\xff\xda\xff\xdb\xff\xdc\xff\xdd\xff\xde\xff\xdf\xff\xe0\xff\xe1\xff\xe2\xff\xe3\xff\xe4\xff\xe5\xff\xe6\xff\xe7\xff\xe8\xff\xe9\xff\xea\xff\xeb\xff\xec\xff\xed\xff\xee\xff\xef\xff\x00\x00\x00\x00\x00\x00\x00\x00\x8d\xff\xb7\xff\x00\x00\x00\x00\xb8\xff\x00\x00\x00\x00\xc3\xff\x00\x00\x00\x00\xc7\xff\x00\x00\x00\x00\xcc\xff\x00\x00\xf4\xff\xf5\xff\x00\x00\x95\xff\x99\xff\x00\x00\x9a\xff\x00\x00\x00\x00\xa6\xff\x00\x00\x00\x00\xa7\xff\xa8\xff\x00\x00\x00\x00\xf6\xff\xb9\xff\xbf\xff\x00\x00\x00\x00\xad\xff\xb5\xff\x98\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\xff\x00\x00\x00\x00\xb1\xff\x00\x00\xb0\xff\x00\x00\x00\x00\x00\x00\xf9\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\xff\xc6\xff\x00\x00\x00\x00\xa3\xff\xf3\xff\x00\x00\xc5\xff\xa9\xff\xb6\xff\x00\x00\xbd\xff\xbb\xff\xba\xff\xb9\xff\x00\x00\x00\x00\xa4\xff\xb3\xff\xb2\xff\xfc\xff\xf8\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa2\xff\xc4\xff\xbc\xff\x00\x00\x00\x00\xfa\xff\x00\x00\xfb\xff"#--happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\x02\x00\x03\x00\x04\x00\x07\x00\x0b\x00\x0a\x00\x09\x00\x09\x00\x0b\x00\x09\x00\x2d\x00\x0b\x00\x0b\x00\x0a\x00\x10\x00\x11\x00\x12\x00\x18\x00\x0d\x00\x2d\x00\x1a\x00\x0d\x00\x18\x00\x2e\x00\x2e\x00\x0b\x00\x2b\x00\x2c\x00\x02\x00\x40\x00\x0b\x00\x30\x00\x02\x00\x07\x00\x39\x00\x39\x00\x06\x00\x27\x00\x40\x00\x02\x00\x0b\x00\x2b\x00\x2c\x00\x02\x00\x07\x00\x0a\x00\x35\x00\x36\x00\x37\x00\x2e\x00\x38\x00\x35\x00\x36\x00\x18\x00\x0a\x00\x3b\x00\x3a\x00\x3c\x00\x3c\x00\x3d\x00\x3c\x00\x3c\x00\x45\x00\x44\x00\x42\x00\x48\x00\x44\x00\x09\x00\x46\x00\x47\x00\x48\x00\x02\x00\x03\x00\x04\x00\x3c\x00\x0c\x00\x12\x00\x48\x00\x09\x00\x0a\x00\x48\x00\x2e\x00\x35\x00\x36\x00\x37\x00\x10\x00\x11\x00\x12\x00\x02\x00\x0b\x00\x2e\x00\x0c\x00\x06\x00\x18\x00\x0c\x00\x02\x00\x09\x00\x0c\x00\x45\x00\x06\x00\x0c\x00\x48\x00\x0c\x00\x01\x00\x02\x00\x12\x00\x02\x00\x02\x00\x27\x00\x2e\x00\x09\x00\x06\x00\x2b\x00\x2c\x00\x12\x00\x13\x00\x3a\x00\x13\x00\x3c\x00\x12\x00\x0d\x00\x0e\x00\x35\x00\x36\x00\x42\x00\x2e\x00\x44\x00\x3a\x00\x2e\x00\x3c\x00\x02\x00\x2e\x00\x12\x00\x13\x00\x2e\x00\x42\x00\x2e\x00\x44\x00\x02\x00\x46\x00\x47\x00\x48\x00\x02\x00\x03\x00\x04\x00\x3a\x00\x3b\x00\x3c\x00\x02\x00\x09\x00\x0a\x00\x09\x00\x41\x00\x42\x00\x13\x00\x44\x00\x10\x00\x11\x00\x12\x00\x10\x00\x00\x00\x3c\x00\x02\x00\x03\x00\x18\x00\x05\x00\x02\x00\x42\x00\x02\x00\x44\x00\x08\x00\x02\x00\x0c\x00\x0d\x00\x0e\x00\x3e\x00\x3f\x00\x11\x00\x43\x00\x27\x00\x14\x00\x15\x00\x16\x00\x2b\x00\x2c\x00\x43\x00\x14\x00\x15\x00\x16\x00\x14\x00\x15\x00\x16\x00\x2d\x00\x35\x00\x36\x00\x02\x00\x0b\x00\x44\x00\x3a\x00\x0b\x00\x3c\x00\x44\x00\x02\x00\x03\x00\x04\x00\x07\x00\x42\x00\x1a\x00\x44\x00\x09\x00\x46\x00\x47\x00\x48\x00\x14\x00\x15\x00\x16\x00\x10\x00\x11\x00\x12\x00\x2e\x00\x00\x00\x3c\x00\x02\x00\x03\x00\x18\x00\x05\x00\x07\x00\x02\x00\x1a\x00\x16\x00\x02\x00\x2d\x00\x0c\x00\x0d\x00\x0e\x00\x0b\x00\x2f\x00\x11\x00\x0b\x00\x27\x00\x14\x00\x15\x00\x16\x00\x2b\x00\x2c\x00\x14\x00\x15\x00\x16\x00\x14\x00\x15\x00\x16\x00\x2f\x00\x09\x00\x35\x00\x36\x00\x0d\x00\x0e\x00\x0f\x00\x3a\x00\x0a\x00\x3c\x00\x3d\x00\x02\x00\x03\x00\x04\x00\x3b\x00\x42\x00\x0a\x00\x44\x00\x09\x00\x46\x00\x47\x00\x48\x00\x44\x00\x16\x00\x3c\x00\x10\x00\x11\x00\x12\x00\x44\x00\x00\x00\x07\x00\x02\x00\x03\x00\x18\x00\x05\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x0c\x00\x0d\x00\x0e\x00\x3c\x00\x32\x00\x11\x00\x01\x00\x27\x00\x14\x00\x15\x00\x16\x00\x2b\x00\x2c\x00\x12\x00\x13\x00\x14\x00\x15\x00\x2e\x00\x2e\x00\x31\x00\x44\x00\x35\x00\x36\x00\x3b\x00\x2f\x00\x2e\x00\x3a\x00\x3c\x00\x3c\x00\x2e\x00\x0b\x00\x0b\x00\x49\x00\x3c\x00\x42\x00\x3c\x00\x44\x00\x44\x00\x46\x00\x47\x00\x48\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\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\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\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x3c\x00\x45\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\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x09\x00\x02\x00\x03\x00\x44\x00\x05\x00\x3c\x00\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\x43\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\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x34\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\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\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\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\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\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\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\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\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\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\xff\xff\x27\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\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\xff\xff\xff\xff\x27\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x02\x00\x03\x00\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x02\x00\x03\x00\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\x0a\x00\xff\xff\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x02\x00\x03\x00\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x02\x00\x03\x00\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x02\x00\x03\x00\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x02\x00\x03\x00\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x02\x00\x03\x00\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x02\x00\x03\x00\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x02\x00\x03\x00\x11\x00\x05\x00\xff\xff\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\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\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\x0d\x00\x0e\x00\x0f\x00\x5b\x00\xc4\x00\xe1\x00\x45\x00\x10\x00\x46\x00\x48\x00\xd2\x00\x49\x00\x46\x00\xe3\x00\x11\x00\x12\x00\x13\x00\x14\x00\xeb\x00\x7e\x00\x5d\x00\xd6\x00\x14\x00\x76\x00\x76\x00\x49\x00\x60\x00\x61\x00\x4a\x00\xd3\x00\x03\x01\x62\x00\x4c\x00\x63\x00\x77\x00\x78\x00\x64\x00\x15\x00\x7f\x00\x4a\x00\x6a\x00\x16\x00\x17\x00\xfc\x00\x4b\x00\xab\x00\x6b\x00\x6c\x00\xc5\x00\xe4\x00\x5e\x00\x18\x00\x19\x00\x14\x00\x7a\x00\x5c\x00\x1a\x00\x47\x00\x1b\x00\x23\x00\x4a\x00\x47\x00\xc6\x00\x1d\x00\x1c\x00\xc7\x00\x1d\x00\x10\x00\x1e\x00\x1f\x00\x20\x00\x0d\x00\x0e\x00\x0f\x00\x4a\x00\xfa\x00\x13\x00\xec\x00\x10\x00\x8a\x00\xd7\x00\x7b\x00\x6b\x00\x6c\x00\x6d\x00\x11\x00\x12\x00\x13\x00\x4c\x00\xf2\x00\x7b\x00\xfb\x00\x4d\x00\x14\x00\xf0\x00\x4c\x00\x10\x00\xcf\x00\x6e\x00\x56\x00\xda\x00\x6f\x00\xdc\x00\xde\x00\xdf\x00\x13\x00\xed\x00\x4c\x00\x15\x00\x7b\x00\x10\x00\x57\x00\x16\x00\x17\x00\x87\x00\x59\x00\xbf\x00\x74\x00\x1b\x00\x13\x00\xc2\x00\x07\x00\x18\x00\x19\x00\x1c\x00\x7b\x00\x1d\x00\x1a\x00\x7b\x00\x1b\x00\xb2\x00\x7b\x00\x58\x00\x59\x00\x7b\x00\x1c\x00\x7b\x00\x1d\x00\xb3\x00\x1e\x00\x1f\x00\x20\x00\x0d\x00\x0e\x00\x0f\x00\x71\x00\x72\x00\x1b\x00\xbb\x00\x10\x00\x55\x00\x65\x00\x73\x00\x1c\x00\x74\x00\x1d\x00\x11\x00\x12\x00\x13\x00\x7b\x00\x08\x01\x1b\x00\x02\x00\x21\x00\x14\x00\x04\x00\xa6\x00\x1c\x00\x02\x00\x1d\x00\x5e\x00\x02\x00\x05\x00\x06\x00\x07\x00\x24\x00\x25\x00\x08\x00\x08\x01\x15\x00\x09\x00\x0a\x00\x0b\x00\x16\x00\x17\x00\x06\x01\xd0\x00\x0a\x00\x0b\x00\xbd\x00\x0a\x00\x0b\x00\xf7\x00\x18\x00\x19\x00\x02\x00\xfe\x00\x1d\x00\x1a\x00\xe2\x00\x1b\x00\x1d\x00\x0d\x00\x0e\x00\x0f\x00\x5b\x00\x1c\x00\xf1\x00\x1d\x00\x10\x00\x1e\x00\x1f\x00\x20\x00\xbf\x00\x0a\x00\x0b\x00\x11\x00\x12\x00\x13\x00\xf2\x00\x06\x01\xcd\x00\x02\x00\x21\x00\x14\x00\x04\x00\x5b\x00\x02\x00\xd0\x00\xd5\x00\x02\x00\xd8\x00\x05\x00\x06\x00\x07\x00\xdb\x00\xd9\x00\x08\x00\xdd\x00\x15\x00\x09\x00\x0a\x00\x0b\x00\x16\x00\x17\x00\x6f\x00\x0a\x00\x0b\x00\x43\x00\x0a\x00\x0b\x00\xaa\x00\xa9\x00\x18\x00\x19\x00\x67\x00\x07\x00\x68\x00\x1a\x00\xac\x00\x1b\x00\x23\x00\x0d\x00\x0e\x00\x0f\x00\x5c\x00\x1c\x00\xaf\x00\x1d\x00\x10\x00\x1e\x00\x1f\x00\x20\x00\x1d\x00\xb6\x00\xb7\x00\x11\x00\x12\x00\x13\x00\x1d\x00\xfb\x00\x5b\x00\x02\x00\x21\x00\x14\x00\x04\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x05\x00\x06\x00\x07\x00\xc1\x00\xc8\x00\x08\x00\xc9\x00\x15\x00\x09\x00\x0a\x00\x0b\x00\x16\x00\x17\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x76\x00\x80\x00\x67\x00\x1d\x00\x18\x00\x19\x00\x5c\x00\x81\x00\x76\x00\x1a\x00\x7d\x00\x1b\x00\x80\x00\x82\x00\x85\x00\xff\xff\x84\x00\x1c\x00\x87\x00\x1d\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\xa8\x00\x42\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x20\x00\x43\x00\x02\x00\x21\x00\x1d\x00\x04\x00\x50\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\xe5\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x00\xf5\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\xd4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x05\x01\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x01\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\xad\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\xb0\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x02\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\xf9\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x00\x00\x3e\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x02\x00\x52\x00\xe5\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x02\x00\x52\x00\xe6\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xca\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\xcb\x00\x00\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x02\x00\x52\x00\xcd\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x02\x00\x52\x00\xad\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x02\x00\x52\x00\xb0\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x02\x00\x52\x00\xc1\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x02\x00\x52\x00\x88\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x02\x00\x52\x00\x53\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x00\x01\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x02\x01\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xf5\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xf7\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xfe\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xe7\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xe8\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xe9\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xec\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xee\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xc9\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xdd\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xb1\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xb4\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xb7\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xb8\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xb9\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xba\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x62\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x73\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x82\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x85\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x8a\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x8b\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x8c\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x8d\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x8e\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x8f\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x90\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x91\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x92\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x93\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x94\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x95\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x96\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x97\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x98\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x99\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x9a\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x9b\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x9c\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x9d\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x9e\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x9f\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xa0\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xa1\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xa2\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xa3\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xa4\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\xa5\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x4e\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x50\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x51\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x55\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x02\x00\x03\x00\x08\x00\x04\x00\x00\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x00\x00\x05\x00\x06\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x09\x00\x0a\x00\x0b\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\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 (1, 115) [- (1 , happyReduce_1),- (2 , happyReduce_2),- (3 , happyReduce_3),- (4 , happyReduce_4),- (5 , happyReduce_5),- (6 , happyReduce_6),- (7 , happyReduce_7),- (8 , happyReduce_8),- (9 , happyReduce_9),- (10 , happyReduce_10),- (11 , happyReduce_11),- (12 , happyReduce_12),- (13 , happyReduce_13),- (14 , happyReduce_14),- (15 , happyReduce_15),- (16 , happyReduce_16),- (17 , happyReduce_17),- (18 , happyReduce_18),- (19 , happyReduce_19),- (20 , happyReduce_20),- (21 , happyReduce_21),- (22 , happyReduce_22),- (23 , happyReduce_23),- (24 , happyReduce_24),- (25 , happyReduce_25),- (26 , happyReduce_26),- (27 , happyReduce_27),- (28 , happyReduce_28),- (29 , happyReduce_29),- (30 , happyReduce_30),- (31 , happyReduce_31),- (32 , happyReduce_32),- (33 , happyReduce_33),- (34 , happyReduce_34),- (35 , happyReduce_35),- (36 , happyReduce_36),- (37 , happyReduce_37),- (38 , happyReduce_38),- (39 , happyReduce_39),- (40 , happyReduce_40),- (41 , happyReduce_41),- (42 , happyReduce_42),- (43 , happyReduce_43),- (44 , happyReduce_44),- (45 , happyReduce_45),- (46 , happyReduce_46),- (47 , happyReduce_47),- (48 , happyReduce_48),- (49 , happyReduce_49),- (50 , happyReduce_50),- (51 , happyReduce_51),- (52 , happyReduce_52),- (53 , happyReduce_53),- (54 , happyReduce_54),- (55 , happyReduce_55),- (56 , happyReduce_56),- (57 , happyReduce_57),- (58 , happyReduce_58),- (59 , happyReduce_59),- (60 , happyReduce_60),- (61 , happyReduce_61),- (62 , happyReduce_62),- (63 , happyReduce_63),- (64 , happyReduce_64),- (65 , happyReduce_65),- (66 , happyReduce_66),- (67 , happyReduce_67),- (68 , happyReduce_68),- (69 , happyReduce_69),- (70 , happyReduce_70),- (71 , happyReduce_71),- (72 , happyReduce_72),- (73 , happyReduce_73),- (74 , happyReduce_74),- (75 , happyReduce_75),- (76 , happyReduce_76),- (77 , happyReduce_77),- (78 , happyReduce_78),- (79 , happyReduce_79),- (80 , happyReduce_80),- (81 , happyReduce_81),- (82 , happyReduce_82),- (83 , happyReduce_83),- (84 , happyReduce_84),- (85 , happyReduce_85),- (86 , happyReduce_86),- (87 , happyReduce_87),- (88 , happyReduce_88),- (89 , happyReduce_89),- (90 , happyReduce_90),- (91 , happyReduce_91),- (92 , happyReduce_92),- (93 , happyReduce_93),- (94 , happyReduce_94),- (95 , happyReduce_95),- (96 , happyReduce_96),- (97 , happyReduce_97),- (98 , happyReduce_98),- (99 , happyReduce_99),- (100 , happyReduce_100),- (101 , happyReduce_101),- (102 , happyReduce_102),- (103 , happyReduce_103),- (104 , happyReduce_104),- (105 , happyReduce_105),- (106 , happyReduce_106),- (107 , happyReduce_107),- (108 , happyReduce_108),- (109 , happyReduce_109),- (110 , happyReduce_110),- (111 , happyReduce_111),- (112 , happyReduce_112),- (113 , happyReduce_113),- (114 , happyReduce_114),- (115 , happyReduce_115)- ]--happy_n_terms = 74 :: Int-happy_n_nonterms = 23 :: Int--happyReduce_1 = happySpecReduce_1 0# happyReduction_1-happyReduction_1 happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - happyIn4- ([happy_var_1]- )}--happyReduce_2 = happySpecReduce_2 0# happyReduction_2-happyReduction_2 happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - happyIn4- ([happy_var_1]- )}--happyReduce_3 = happyReduce 7# 0# happyReduction_3-happyReduction_3 (happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut6 happy_x_3 of { happy_var_3 -> - case happyOut7 happy_x_5 of { happy_var_5 -> - case happyOut4 happy_x_7 of { happy_var_7 -> - happyIn4- ((Ast "variable" [happy_var_3,happy_var_5]):happy_var_7- ) `HappyStk` happyRest}}}--happyReduce_4 = happyReduce 11# 0# happyReduction_4-happyReduction_4 (happy_x_11 `HappyStk`- happy_x_10 `HappyStk`- happy_x_9 `HappyStk`- happy_x_8 `HappyStk`- happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_3 of { (QName happy_var_3) -> - case happyOut5 happy_x_5 of { happy_var_5 -> - case happyOut7 happy_x_8 of { happy_var_8 -> - case happyOut4 happy_x_11 of { happy_var_11 -> - happyIn4- ((Ast "function" ([Avar happy_var_3,happy_var_8]++happy_var_5)):happy_var_11- ) `HappyStk` happyRest}}}}--happyReduce_5 = happyReduce 10# 0# happyReduction_5-happyReduction_5 (happy_x_10 `HappyStk`- happy_x_9 `HappyStk`- happy_x_8 `HappyStk`- happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_3 of { (QName happy_var_3) -> - case happyOut7 happy_x_7 of { happy_var_7 -> - case happyOut4 happy_x_10 of { happy_var_10 -> - happyIn4- ((Ast "function" ([Avar happy_var_3,happy_var_7])):happy_var_10- ) `HappyStk` happyRest}}}--happyReduce_6 = happySpecReduce_1 1# happyReduction_6-happyReduction_6 happy_x_1- = case happyOut6 happy_x_1 of { happy_var_1 -> - happyIn5- ([happy_var_1]- )}--happyReduce_7 = happySpecReduce_3 1# happyReduction_7-happyReduction_7 happy_x_3- happy_x_2- happy_x_1- = case happyOut5 happy_x_1 of { happy_var_1 -> - case happyOut6 happy_x_3 of { happy_var_3 -> - happyIn5- (happy_var_1++[happy_var_3]- )}}--happyReduce_8 = happySpecReduce_1 2# happyReduction_8-happyReduction_8 happy_x_1- = case happyOutTok happy_x_1 of { (Variable happy_var_1) -> - happyIn6- (Avar happy_var_1- )}--happyReduce_9 = happyReduce 5# 3# happyReduction_9-happyReduction_9 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut9 happy_x_1 of { happy_var_1 -> - case happyOut12 happy_x_2 of { happy_var_2 -> - case happyOut13 happy_x_3 of { happy_var_3 -> - case happyOut7 happy_x_5 of { happy_var_5 -> - happyIn7- ((snd happy_var_3) (happy_var_1 (happy_var_2 ((fst happy_var_3) happy_var_5)))- ) `HappyStk` happyRest}}}}--happyReduce_10 = happyReduce 4# 3# happyReduction_10-happyReduction_10 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut10 happy_x_2 of { happy_var_2 -> - case happyOut7 happy_x_4 of { happy_var_4 -> - happyIn7- (call "some" [happy_var_2 happy_var_4]- ) `HappyStk` happyRest}}--happyReduce_11 = happyReduce 4# 3# happyReduction_11-happyReduction_11 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut10 happy_x_2 of { happy_var_2 -> - case happyOut7 happy_x_4 of { happy_var_4 -> - happyIn7- (call "not" [call "some" [happy_var_2 (call "not" [happy_var_4])]]- ) `HappyStk` happyRest}}--happyReduce_12 = happyReduce 6# 3# happyReduction_12-happyReduction_12 (happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut7 happy_x_2 of { happy_var_2 -> - case happyOut7 happy_x_4 of { happy_var_4 -> - case happyOut7 happy_x_6 of { happy_var_6 -> - happyIn7- (call "if" [happy_var_2,happy_var_4,happy_var_6]- ) `HappyStk` happyRest}}}--happyReduce_13 = happySpecReduce_1 3# happyReduction_13-happyReduction_13 happy_x_1- = case happyOut21 happy_x_1 of { happy_var_1 -> - happyIn7- (happy_var_1- )}--happyReduce_14 = happySpecReduce_1 3# happyReduction_14-happyReduction_14 happy_x_1- = case happyOut17 happy_x_1 of { happy_var_1 -> - happyIn7- (happy_var_1- )}--happyReduce_15 = happySpecReduce_1 3# happyReduction_15-happyReduction_15 happy_x_1- = case happyOut16 happy_x_1 of { happy_var_1 -> - happyIn7- (happy_var_1- )}--happyReduce_16 = happySpecReduce_3 3# happyReduction_16-happyReduction_16 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "to" [happy_var_1,happy_var_3]- )}}--happyReduce_17 = happySpecReduce_3 3# happyReduction_17-happyReduction_17 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "+" [happy_var_1,happy_var_3]- )}}--happyReduce_18 = happySpecReduce_3 3# happyReduction_18-happyReduction_18 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "-" [happy_var_1,happy_var_3]- )}}--happyReduce_19 = happySpecReduce_3 3# happyReduction_19-happyReduction_19 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "*" [happy_var_1,happy_var_3]- )}}--happyReduce_20 = happySpecReduce_3 3# happyReduction_20-happyReduction_20 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "div" [happy_var_1,happy_var_3]- )}}--happyReduce_21 = happySpecReduce_3 3# happyReduction_21-happyReduction_21 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "idiv" [happy_var_1,happy_var_3]- )}}--happyReduce_22 = happySpecReduce_3 3# happyReduction_22-happyReduction_22 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "mod" [happy_var_1,happy_var_3]- )}}--happyReduce_23 = happySpecReduce_3 3# happyReduction_23-happyReduction_23 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "=" [happy_var_1,happy_var_3]- )}}--happyReduce_24 = happySpecReduce_3 3# happyReduction_24-happyReduction_24 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "!=" [happy_var_1,happy_var_3]- )}}--happyReduce_25 = happySpecReduce_3 3# happyReduction_25-happyReduction_25 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "<" [happy_var_1,happy_var_3]- )}}--happyReduce_26 = happySpecReduce_3 3# happyReduction_26-happyReduction_26 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "<=" [happy_var_1,happy_var_3]- )}}--happyReduce_27 = happySpecReduce_3 3# happyReduction_27-happyReduction_27 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call ">" [happy_var_1,happy_var_3]- )}}--happyReduce_28 = happySpecReduce_3 3# happyReduction_28-happyReduction_28 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call ">=" [happy_var_1,happy_var_3]- )}}--happyReduce_29 = happySpecReduce_3 3# happyReduction_29-happyReduction_29 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "<<" [happy_var_1,happy_var_3]- )}}--happyReduce_30 = happySpecReduce_3 3# happyReduction_30-happyReduction_30 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call ">>" [happy_var_1,happy_var_3]- )}}--happyReduce_31 = happySpecReduce_3 3# happyReduction_31-happyReduction_31 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "is" [happy_var_1,happy_var_3]- )}}--happyReduce_32 = happySpecReduce_3 3# happyReduction_32-happyReduction_32 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "eq" [happy_var_1,happy_var_3]- )}}--happyReduce_33 = happySpecReduce_3 3# happyReduction_33-happyReduction_33 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "ne" [happy_var_1,happy_var_3]- )}}--happyReduce_34 = happySpecReduce_3 3# happyReduction_34-happyReduction_34 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "lt" [happy_var_1,happy_var_3]- )}}--happyReduce_35 = happySpecReduce_3 3# happyReduction_35-happyReduction_35 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "le" [happy_var_1,happy_var_3]- )}}--happyReduce_36 = happySpecReduce_3 3# happyReduction_36-happyReduction_36 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "gt" [happy_var_1,happy_var_3]- )}}--happyReduce_37 = happySpecReduce_3 3# happyReduction_37-happyReduction_37 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "ge" [happy_var_1,happy_var_3]- )}}--happyReduce_38 = happySpecReduce_3 3# happyReduction_38-happyReduction_38 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "and" [happy_var_1,happy_var_3]- )}}--happyReduce_39 = happySpecReduce_3 3# happyReduction_39-happyReduction_39 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "or" [happy_var_1,happy_var_3]- )}}--happyReduce_40 = happySpecReduce_3 3# happyReduction_40-happyReduction_40 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "not" [happy_var_1,happy_var_3]- )}}--happyReduce_41 = happySpecReduce_3 3# happyReduction_41-happyReduction_41 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "union" [happy_var_1,happy_var_3]- )}}--happyReduce_42 = happySpecReduce_3 3# happyReduction_42-happyReduction_42 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "intersect" [happy_var_1,happy_var_3]- )}}--happyReduce_43 = happySpecReduce_3 3# happyReduction_43-happyReduction_43 happy_x_3- happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn7- (call "except" [happy_var_1,happy_var_3]- )}}--happyReduce_44 = happySpecReduce_2 3# happyReduction_44-happyReduction_44 happy_x_2- happy_x_1- = case happyOut7 happy_x_2 of { happy_var_2 -> - happyIn7- (call "uplus" [happy_var_2]- )}--happyReduce_45 = happySpecReduce_2 3# happyReduction_45-happyReduction_45 happy_x_2- happy_x_1- = case happyOut7 happy_x_2 of { happy_var_2 -> - happyIn7- (call "uminus" [happy_var_2]- )}--happyReduce_46 = happySpecReduce_2 3# happyReduction_46-happyReduction_46 happy_x_2- happy_x_1- = case happyOut7 happy_x_2 of { happy_var_2 -> - happyIn7- (call "not" [happy_var_2]- )}--happyReduce_47 = happySpecReduce_1 3# happyReduction_47-happyReduction_47 happy_x_1- = case happyOutTok happy_x_1 of { (TString happy_var_1) -> - happyIn7- (Astring happy_var_1- )}--happyReduce_48 = happySpecReduce_1 3# happyReduction_48-happyReduction_48 happy_x_1- = case happyOutTok happy_x_1 of { (TInteger happy_var_1) -> - happyIn7- (Aint happy_var_1- )}--happyReduce_49 = happySpecReduce_1 3# happyReduction_49-happyReduction_49 happy_x_1- = case happyOutTok happy_x_1 of { (TFloat happy_var_1) -> - happyIn7- (Afloat happy_var_1- )}--happyReduce_50 = happySpecReduce_1 4# happyReduction_50-happyReduction_50 happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - happyIn8- ([happy_var_1]- )}--happyReduce_51 = happySpecReduce_3 4# happyReduction_51-happyReduction_51 happy_x_3- happy_x_2- happy_x_1- = case happyOut8 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn8- (happy_var_1++[happy_var_3]- )}}--happyReduce_52 = happySpecReduce_2 5# happyReduction_52-happyReduction_52 happy_x_2- happy_x_1- = case happyOut10 happy_x_2 of { happy_var_2 -> - happyIn9- (happy_var_2- )}--happyReduce_53 = happySpecReduce_2 5# happyReduction_53-happyReduction_53 happy_x_2- happy_x_1- = case happyOut11 happy_x_2 of { happy_var_2 -> - happyIn9- (happy_var_2- )}--happyReduce_54 = happySpecReduce_3 5# happyReduction_54-happyReduction_54 happy_x_3- happy_x_2- happy_x_1- = case happyOut9 happy_x_1 of { happy_var_1 -> - case happyOut10 happy_x_3 of { happy_var_3 -> - happyIn9- (happy_var_1 . happy_var_3- )}}--happyReduce_55 = happySpecReduce_3 5# happyReduction_55-happyReduction_55 happy_x_3- happy_x_2- happy_x_1- = case happyOut9 happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - happyIn9- (happy_var_1 . happy_var_3- )}}--happyReduce_56 = happySpecReduce_3 6# happyReduction_56-happyReduction_56 happy_x_3- happy_x_2- happy_x_1- = case happyOut6 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn10- (\x -> Ast "for" [happy_var_1,Avar "$",happy_var_3,x]- )}}--happyReduce_57 = happyReduce 5# 6# happyReduction_57-happyReduction_57 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut6 happy_x_1 of { happy_var_1 -> - case happyOut6 happy_x_3 of { happy_var_3 -> - case happyOut7 happy_x_5 of { happy_var_5 -> - happyIn10- (\x -> Ast "for" [happy_var_1,happy_var_3,happy_var_5,x]- ) `HappyStk` happyRest}}}--happyReduce_58 = happyReduce 5# 6# happyReduction_58-happyReduction_58 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut10 happy_x_1 of { happy_var_1 -> - case happyOut6 happy_x_3 of { happy_var_3 -> - case happyOut7 happy_x_5 of { happy_var_5 -> - happyIn10- (\x -> happy_var_1(Ast "for" [happy_var_3,Avar "$",happy_var_5,x])- ) `HappyStk` happyRest}}}--happyReduce_59 = happyReduce 7# 6# happyReduction_59-happyReduction_59 (happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut10 happy_x_1 of { happy_var_1 -> - case happyOut6 happy_x_3 of { happy_var_3 -> - case happyOut6 happy_x_5 of { happy_var_5 -> - case happyOut7 happy_x_7 of { happy_var_7 -> - happyIn10- (\x -> happy_var_1(Ast "for" [happy_var_3,happy_var_5,happy_var_7,x])- ) `HappyStk` happyRest}}}}--happyReduce_60 = happySpecReduce_3 7# happyReduction_60-happyReduction_60 happy_x_3- happy_x_2- happy_x_1- = case happyOut6 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn11- (\x -> Ast "let" [happy_var_1,happy_var_3,x]- )}}--happyReduce_61 = happyReduce 5# 7# happyReduction_61-happyReduction_61 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut11 happy_x_1 of { happy_var_1 -> - case happyOut6 happy_x_3 of { happy_var_3 -> - case happyOut7 happy_x_5 of { happy_var_5 -> - happyIn11- (\x -> happy_var_1(Ast "let" [happy_var_3,happy_var_5,x])- ) `HappyStk` happyRest}}}--happyReduce_62 = happySpecReduce_2 8# happyReduction_62-happyReduction_62 happy_x_2- happy_x_1- = case happyOut7 happy_x_2 of { happy_var_2 -> - happyIn12- (\x -> Ast "predicate" [happy_var_2,x]- )}--happyReduce_63 = happySpecReduce_0 8# happyReduction_63-happyReduction_63 = happyIn12- (id- )--happyReduce_64 = happySpecReduce_3 9# happyReduction_64-happyReduction_64 happy_x_3- happy_x_2- happy_x_1- = case happyOut14 happy_x_3 of { happy_var_3 -> - happyIn13- ((\x -> Ast "sortTuple" (x:(fst happy_var_3)),- \x -> Ast "sort" (x:(snd happy_var_3)))- )}--happyReduce_65 = happySpecReduce_0 9# happyReduction_65-happyReduction_65 = happyIn13- ((id,id)- )--happyReduce_66 = happySpecReduce_2 10# happyReduction_66-happyReduction_66 happy_x_2- happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - case happyOut15 happy_x_2 of { happy_var_2 -> - happyIn14- (([happy_var_1],[happy_var_2])- )}}--happyReduce_67 = happyReduce 4# 10# happyReduction_67-happyReduction_67 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut14 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - case happyOut15 happy_x_4 of { happy_var_4 -> - happyIn14- (((fst happy_var_1)++[happy_var_3],(snd happy_var_1)++[happy_var_4])- ) `HappyStk` happyRest}}}--happyReduce_68 = happySpecReduce_1 11# happyReduction_68-happyReduction_68 happy_x_1- = happyIn15- (Avar "ascending"- )--happyReduce_69 = happySpecReduce_1 11# happyReduction_69-happyReduction_69 happy_x_1- = happyIn15- (Avar "descending"- )--happyReduce_70 = happySpecReduce_0 11# happyReduction_70-happyReduction_70 = happyIn15- (Avar "ascending"- )--happyReduce_71 = happyReduce 4# 12# happyReduction_71-happyReduction_71 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_3 of { (QName happy_var_3) -> - happyIn16- (call "element" [Avar happy_var_3]- ) `HappyStk` happyRest}--happyReduce_72 = happyReduce 4# 12# happyReduction_72-happyReduction_72 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_3 of { (QName happy_var_3) -> - happyIn16- (call "attribute" [Avar happy_var_3]- ) `HappyStk` happyRest}--happyReduce_73 = happyReduce 6# 13# happyReduction_73-happyReduction_73 (happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut18 happy_x_1 of { happy_var_1 -> - case happyOut19 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_5 of { (QName happy_var_5) -> - happyIn17- (if head happy_var_1 == Astring happy_var_5- then Ast "construction" (happy_var_1++[concatAll happy_var_3])- else error("Unmatched tags in element construction: "++happy_var_5)- ) `HappyStk` happyRest}}}--happyReduce_74 = happyReduce 5# 13# happyReduction_74-happyReduction_74 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut18 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_4 of { (QName happy_var_4) -> - happyIn17- (if head happy_var_1 == Astring happy_var_4- then Ast "construction" (happy_var_1++[call "empty" []])- else error("Unmatched tags in element construction: "++happy_var_4)- ) `HappyStk` happyRest}}--happyReduce_75 = happySpecReduce_2 13# happyReduction_75-happyReduction_75 happy_x_2- happy_x_1- = case happyOut18 happy_x_1 of { happy_var_1 -> - happyIn17- (Ast "construction" (happy_var_1++[call "empty" []])- )}--happyReduce_76 = happyReduce 7# 13# happyReduction_76-happyReduction_76 (happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut7 happy_x_3 of { happy_var_3 -> - case happyOut8 happy_x_6 of { happy_var_6 -> - happyIn17- (Ast "element_construction" [happy_var_3,concatenateAll happy_var_6]- ) `HappyStk` happyRest}}--happyReduce_77 = happyReduce 7# 13# happyReduction_77-happyReduction_77 (happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut7 happy_x_3 of { happy_var_3 -> - case happyOut8 happy_x_6 of { happy_var_6 -> - happyIn17- (Ast "attribute_construction" [happy_var_3,concatenateAll happy_var_6]- ) `HappyStk` happyRest}}--happyReduce_78 = happyReduce 5# 13# happyReduction_78-happyReduction_78 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_2 of { (QName happy_var_2) -> - case happyOut8 happy_x_4 of { happy_var_4 -> - happyIn17- (Ast "element_construction" [Astring happy_var_2,concatenateAll happy_var_4]- ) `HappyStk` happyRest}}--happyReduce_79 = happyReduce 5# 13# happyReduction_79-happyReduction_79 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_2 of { (QName happy_var_2) -> - case happyOut8 happy_x_4 of { happy_var_4 -> - happyIn17- (Ast "attribute_construction" [Astring happy_var_2,concatenateAll happy_var_4]- ) `HappyStk` happyRest}}--happyReduce_80 = happySpecReduce_2 14# happyReduction_80-happyReduction_80 happy_x_2- happy_x_1- = case happyOutTok happy_x_2 of { (QName happy_var_2) -> - happyIn18- ([Astring happy_var_2,Ast "attributes" []]- )}--happyReduce_81 = happySpecReduce_3 14# happyReduction_81-happyReduction_81 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_2 of { (QName happy_var_2) -> - case happyOut20 happy_x_3 of { happy_var_3 -> - happyIn18- ([Astring happy_var_2,Ast "attributes" happy_var_3]- )}}--happyReduce_82 = happySpecReduce_3 15# happyReduction_82-happyReduction_82 happy_x_3- happy_x_2- happy_x_1- = case happyOut8 happy_x_2 of { happy_var_2 -> - happyIn19- ([concatenateAll happy_var_2]- )}--happyReduce_83 = happySpecReduce_1 15# happyReduction_83-happyReduction_83 happy_x_1- = case happyOutTok happy_x_1 of { (TString happy_var_1) -> - happyIn19- ([Astring happy_var_1]- )}--happyReduce_84 = happySpecReduce_1 15# happyReduction_84-happyReduction_84 happy_x_1- = case happyOutTok happy_x_1 of { (XMLtext happy_var_1) -> - happyIn19- ([Astring happy_var_1]- )}--happyReduce_85 = happySpecReduce_1 15# happyReduction_85-happyReduction_85 happy_x_1- = case happyOut17 happy_x_1 of { happy_var_1 -> - happyIn19- ([happy_var_1]- )}--happyReduce_86 = happyReduce 4# 15# happyReduction_86-happyReduction_86 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut19 happy_x_1 of { happy_var_1 -> - case happyOut8 happy_x_3 of { happy_var_3 -> - happyIn19- (happy_var_1++[concatenateAll happy_var_3]- ) `HappyStk` happyRest}}--happyReduce_87 = happySpecReduce_2 15# happyReduction_87-happyReduction_87 happy_x_2- happy_x_1- = case happyOut19 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (TString happy_var_2) -> - happyIn19- (happy_var_1++[Astring happy_var_2]- )}}--happyReduce_88 = happySpecReduce_2 15# happyReduction_88-happyReduction_88 happy_x_2- happy_x_1- = case happyOut19 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (XMLtext happy_var_2) -> - happyIn19- (happy_var_1++[Astring happy_var_2]- )}}--happyReduce_89 = happySpecReduce_2 15# happyReduction_89-happyReduction_89 happy_x_2- happy_x_1- = case happyOut19 happy_x_1 of { happy_var_1 -> - case happyOut17 happy_x_2 of { happy_var_2 -> - happyIn19- (happy_var_1++[happy_var_2]- )}}--happyReduce_90 = happySpecReduce_3 16# happyReduction_90-happyReduction_90 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (QName happy_var_1) -> - case happyOutTok happy_x_3 of { (TString happy_var_3) -> - happyIn20- ([Ast "pair" [Astring happy_var_1,Astring happy_var_3]]- )}}--happyReduce_91 = happyReduce 5# 16# happyReduction_91-happyReduction_91 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (QName happy_var_1) -> - case happyOut7 happy_x_4 of { happy_var_4 -> - happyIn20- ([Ast "pair" [Astring happy_var_1,happy_var_4]]- ) `HappyStk` happyRest}}--happyReduce_92 = happyReduce 4# 16# happyReduction_92-happyReduction_92 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut20 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (QName happy_var_2) -> - case happyOutTok happy_x_4 of { (TString happy_var_4) -> - happyIn20- (happy_var_1++[Ast "pair" [Astring happy_var_2,Astring happy_var_4]]- ) `HappyStk` happyRest}}}--happyReduce_93 = happyReduce 6# 16# happyReduction_93-happyReduction_93 (happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut20 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { (QName happy_var_2) -> - case happyOut7 happy_x_5 of { happy_var_5 -> - happyIn20- (happy_var_1++[Ast "pair" [Astring happy_var_2,happy_var_5]]- ) `HappyStk` happyRest}}}--happyReduce_94 = happySpecReduce_1 17# happyReduction_94-happyReduction_94 happy_x_1- = case happyOut24 happy_x_1 of { happy_var_1 -> - happyIn21- (Ast "step" (happy_var_1 "child_step" (Avar "."))- )}--happyReduce_95 = happySpecReduce_2 17# happyReduction_95-happyReduction_95 happy_x_2- happy_x_1- = case happyOut24 happy_x_2 of { happy_var_2 -> - happyIn21- (Ast "step" (happy_var_2 "attribute_step" (Avar "."))- )}--happyReduce_96 = happySpecReduce_2 17# happyReduction_96-happyReduction_96 happy_x_2- happy_x_1- = case happyOut24 happy_x_1 of { happy_var_1 -> - case happyOut22 happy_x_2 of { happy_var_2 -> - happyIn21- (Ast "step" [happy_var_2 (Ast "step" (happy_var_1 "child_step" (Avar ".")))]- )}}--happyReduce_97 = happySpecReduce_3 17# happyReduction_97-happyReduction_97 happy_x_3- happy_x_2- happy_x_1- = case happyOut24 happy_x_2 of { happy_var_2 -> - case happyOut22 happy_x_3 of { happy_var_3 -> - happyIn21- (Ast "step" (map happy_var_3 (happy_var_2 "attribute_step" (Avar ".")))- )}}--happyReduce_98 = happySpecReduce_1 18# happyReduction_98-happyReduction_98 happy_x_1- = case happyOut23 happy_x_1 of { happy_var_1 -> - happyIn22- (happy_var_1- )}--happyReduce_99 = happySpecReduce_2 18# happyReduction_99-happyReduction_99 happy_x_2- happy_x_1- = case happyOut22 happy_x_1 of { happy_var_1 -> - case happyOut23 happy_x_2 of { happy_var_2 -> - happyIn22- (happy_var_2 . happy_var_1- )}}--happyReduce_100 = happySpecReduce_2 19# happyReduction_100-happyReduction_100 happy_x_2- happy_x_1- = case happyOut24 happy_x_2 of { happy_var_2 -> - happyIn23- (\e -> Ast "step" (happy_var_2 "child_step" e)- )}--happyReduce_101 = happySpecReduce_3 19# happyReduction_101-happyReduction_101 happy_x_3- happy_x_2- happy_x_1- = case happyOut24 happy_x_3 of { happy_var_3 -> - happyIn23- (\e -> Ast "step" (happy_var_3 "attribute_step" e)- )}--happyReduce_102 = happySpecReduce_3 19# happyReduction_102-happyReduction_102 happy_x_3- happy_x_2- happy_x_1- = case happyOut24 happy_x_3 of { happy_var_3 -> - happyIn23- (\e -> Ast "step" (happy_var_3 "descendant_step" e)- )}--happyReduce_103 = happyReduce 4# 19# happyReduction_103-happyReduction_103 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut24 happy_x_4 of { happy_var_4 -> - happyIn23- (\e -> Ast "step" (happy_var_4 "attribute_descendant_step" e)- ) `HappyStk` happyRest}--happyReduce_104 = happySpecReduce_2 19# happyReduction_104-happyReduction_104 happy_x_2- happy_x_1- = happyIn23- (\e -> Ast "step" [Ast "parent_step" [e]]- )--happyReduce_105 = happySpecReduce_1 20# happyReduction_105-happyReduction_105 happy_x_1- = case happyOut25 happy_x_1 of { happy_var_1 -> - happyIn24- (\t e -> [happy_var_1 t e]- )}--happyReduce_106 = happyReduce 4# 20# happyReduction_106-happyReduction_106 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut24 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_3 of { happy_var_3 -> - happyIn24- (\t e -> (happy_var_1 t e)++[happy_var_3]- ) `HappyStk` happyRest}}--happyReduce_107 = happySpecReduce_1 21# happyReduction_107-happyReduction_107 happy_x_1- = case happyOut26 happy_x_1 of { happy_var_1 -> - happyIn25- (\t e -> happy_var_1 t e- )}--happyReduce_108 = happySpecReduce_1 21# happyReduction_108-happyReduction_108 happy_x_1- = happyIn25- (\t e -> Ast t [Astring "*",e]- )--happyReduce_109 = happySpecReduce_1 21# happyReduction_109-happyReduction_109 happy_x_1- = case happyOutTok happy_x_1 of { (QName happy_var_1) -> - happyIn25- (\t e -> Ast t [Astring happy_var_1,e]- )}--happyReduce_110 = happySpecReduce_1 22# happyReduction_110-happyReduction_110 happy_x_1- = case happyOut6 happy_x_1 of { happy_var_1 -> - happyIn26- (\_ _ -> happy_var_1- )}--happyReduce_111 = happySpecReduce_1 22# happyReduction_111-happyReduction_111 happy_x_1- = happyIn26- (\_ e -> e- )--happyReduce_112 = happySpecReduce_3 22# happyReduction_112-happyReduction_112 happy_x_3- happy_x_2- happy_x_1- = case happyOut8 happy_x_2 of { happy_var_2 -> - happyIn26- (\t e -> if e == Avar "."- then concatenateAll happy_var_2- else Ast "context" [e,Astring t,concatenateAll happy_var_2]- )}--happyReduce_113 = happySpecReduce_2 22# happyReduction_113-happyReduction_113 happy_x_2- happy_x_1- = happyIn26- (\_ _ -> call "empty" []- )--happyReduce_114 = happyReduce 4# 22# happyReduction_114-happyReduction_114 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (QName happy_var_1) -> - case happyOut8 happy_x_3 of { happy_var_3 -> - happyIn26- (\_ e -> if e == Avar "."- then call happy_var_1 happy_var_3- else Ast "context" [e,call happy_var_1 happy_var_3]- ) `HappyStk` happyRest}}--happyReduce_115 = happySpecReduce_3 22# happyReduction_115-happyReduction_115 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (QName happy_var_1) -> - happyIn26- (if elem happy_var_1 ["text"]- then \_ e -> call happy_var_1 [e]- else \_ _ -> call happy_var_1 []- )}--happyNewToken action sts stk [] =- happyDoAction 73# notHappyAtAll action sts stk []--happyNewToken action sts stk (tk:tks) =- let cont i = happyDoAction i tk action sts stk tks in- case tk of {- RETURN -> cont 1#;- SOME -> cont 2#;- EVERY -> cont 3#;- IF -> cont 4#;- THEN -> cont 5#;- ELSE -> cont 6#;- LB -> cont 7#;- RB -> cont 8#;- LP -> cont 9#;- RP -> cont 10#;- LSB -> cont 11#;- RSB -> cont 12#;- LESCAPE -> cont 13#;- RESCAPE -> cont 14#;- TO -> cont 15#;- PLUS -> cont 16#;- MINUS -> cont 17#;- TIMES -> cont 18#;- DIV -> cont 19#;- IDIV -> cont 20#;- MOD -> cont 21#;- TEQ -> cont 22#;- TNE -> cont 23#;- TLT -> cont 24#;- TLE -> cont 25#;- TGT -> cont 26#;- TGE -> cont 27#;- PRE -> cont 28#;- POST -> cont 29#;- IS -> cont 30#;- SEQ -> cont 31#;- SNE -> cont 32#;- SLT -> cont 33#;- SLE -> cont 34#;- SGT -> cont 35#;- SGE -> cont 36#;- AND -> cont 37#;- OR -> cont 38#;- NOT -> cont 39#;- UNION -> cont 40#;- INTERSECT -> cont 41#;- EXCEPT -> cont 42#;- FOR -> cont 43#;- LET -> cont 44#;- IN -> cont 45#;- COMMA -> cont 46#;- ASSIGN -> cont 47#;- WHERE -> cont 48#;- ORDER -> cont 49#;- BY -> cont 50#;- ASCENDING -> cont 51#;- DESCENDING -> cont 52#;- ELEMENT -> cont 53#;- ATTRIBUTE -> cont 54#;- STAG -> cont 55#;- ETAG -> cont 56#;- SATISFIES -> cont 57#;- ATSIGN -> cont 58#;- SLASH -> cont 59#;- QName happy_dollar_dollar -> cont 60#;- DECLARE -> cont 61#;- FUNCTION -> cont 62#;- VARIABLE -> cont 63#;- AT -> cont 64#;- DOTS -> cont 65#;- DOT -> cont 66#;- SEMI -> cont 67#;- Variable happy_dollar_dollar -> cont 68#;- XMLtext happy_dollar_dollar -> cont 69#;- TInteger happy_dollar_dollar -> cont 70#;- TFloat happy_dollar_dollar -> cont 71#;- TString happy_dollar_dollar -> cont 72#;- _ -> happyError' (tk:tks)- }--happyError_ tk tks = happyError' (tk:tks)--newtype HappyIdentity a = HappyIdentity a-happyIdentity = HappyIdentity-happyRunIdentity (HappyIdentity a) = a--instance Monad HappyIdentity where- return = HappyIdentity- (HappyIdentity p) >>= q = q p--happyThen :: () => HappyIdentity a -> (a -> HappyIdentity b) -> HappyIdentity b-happyThen = (>>=)-happyReturn :: () => a -> HappyIdentity a-happyReturn = (return)-happyThen1 m k tks = (>>=) m (\a -> k a tks)-happyReturn1 :: () => a -> b -> HappyIdentity a-happyReturn1 = \a tks -> (return) a-happyError' :: () => [Token] -> HappyIdentity a-happyError' = HappyIdentity . parseError--parse tks = happyRunIdentity happySomeParser where- happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut4 x))--happySeq = happyDontSeq----- Abstract Syntax Tree for XQueries-data Ast = Ast String [Ast]- | Avar String- | Aint Int- | Afloat Float- | Astring String- deriving Eq---instance Show Ast- where show (Ast s []) = s ++ "()"- show (Ast s (x:xs)) = s ++ "(" ++ (show x)- ++ (foldr (\a r -> ","++(show a)++r) "" xs)- ++ ")"- show (Avar s) = s- show (Aint n) = show n- show (Afloat n) = show n- show (Astring s) = "\'" ++ s ++ "\'"---call :: String -> [Ast] -> Ast-call name args = Ast "call" ((Avar name):args)---concatenateAll :: [Ast] -> Ast-concatenateAll (x:xs) = foldl (\a r -> call "concatenate" [a,r]) x xs-concatenateAll _ = call "empty" []---concatAll :: [Ast] -> Ast-concatAll (x:xs) = foldl (\a r -> call "concat" [a,r]) x xs-concatAll _ = call "empty" []---parseError tk = error ("Parse error: "++(show (take 10 tk)))---data Token- = RETURN | SOME | EVERY | IF | THEN | ELSE | LB | RB | LP | RP | LSB | RSB- | LESCAPE | RESCAPE | TO | PLUS | MINUS | TIMES | DIV | IDIV | MOD- | TEQ | TNE | TLT | TLE | TGT | TGE | SEQ | SNE | SLT | SLE | SGT | SGE- | AND | OR | NOT | UNION | INTERSECT | EXCEPT | FOR | LET | IN | COMMA- | ASSIGN | WHERE | ORDER | BY | ASCENDING | DESCENDING | ELEMENT- | ATTRIBUTE | STAG | ETAG | SATISFIES | ATSIGN | SLASH | DECLARE | SEMI- | FUNCTION | VARIABLE |AT | DOT | DOTS | TokenEOF | PRE | POST | IS- | QName String | Variable String | XMLtext String | TInteger Int- | TFloat Float | TString String- deriving Show---scan :: String -> [Token]-scan cs = lexer cs [0]---xmlText "" = []-xmlText text = [XMLtext text]---- scans XML syntax and returns an XMLtext token with the text-xml :: String -> String -> [Int] -> [Token]-xml ('{':cs) text n = (xmlText text)++(LSB : lexer cs (0:n))-xml ('<':'/':cs) text n = (xmlText text)++(STAG : lexer cs n)-xml ('<':'!':'-':cs) text n = xmlComment cs (text++"<!-") n-xml ('<':cs) text (k:n) = (xmlText text)++(TLT : lexer cs (k+2:n))-xml ('\'':'{':cs) text n = (xmlText text)++(LESCAPE : lexer cs n)-xml ('\"':'{':cs) text n = (xmlText text)++(LESCAPE : lexer cs n)-xml ('(':':':cs) text n = xqComment cs text n-xml (c:cs) text n = xml cs (text++[c]) n-xml [] text _ = xmlText text--xqComment (':':')':cs) text n = xml cs text n-xqComment (_:cs) text n = xqComment cs text n-xqComment [] text _ = xmlText text--xmlComment ('-':'>':cs) text n = xml cs (text++"->") n-xmlComment (c:cs) text n = xmlComment cs (text++[c]) n-xmlComment [] text _ = xmlText text--isQN c = elem c "_:-" || isDigit c || isAlpha c--isVar c = elem c "_" || isDigit c || isAlpha c---- the XQuery scanner-lexer :: String -> [Int] -> [Token]-lexer [] [0] = []-lexer [] _ = error("Unbalanced tags")-lexer (' ':'>':' ':cs) n = TGT : lexer cs n-lexer (c:cs) n- | isSpace c = lexer cs n- | isAlpha c = lexVar (c:cs) n- | isDigit c = lexNum (c:cs) n-lexer ('$':c:cs) n | isAlpha c- = let (var,rest) = span isVar (c:cs)- in (Variable var) : lexer rest n-lexer ('\'':'{':cs) n = LESCAPE : lexer cs n-lexer ('\"':'{':cs) n = LESCAPE : lexer cs n-lexer (':':'=':cs) n = ASSIGN : lexer cs n-lexer ('<':'/':cs) n = STAG : lexer cs n-lexer ('<':'=':cs) n = TLE : lexer cs n-lexer ('>':'=':cs) n = TGE : lexer cs n-lexer ('<':'<':cs) n = PRE : lexer cs n-lexer ('>':'>':cs) n = POST : lexer cs n-lexer ('/':'>':cs) (k:n) = ETAG : lexer cs (k-2:n)-lexer ('(':':':cs) n = lexComment cs n-lexer ('<':'!':'-':cs) n = lexXmlComment cs "<!-" n-lexer ('.':'.':cs) n = DOTS : lexer cs n-lexer ('.':cs) n = DOT : lexer cs n-lexer ('}':'\'':cs) n = RESCAPE : lexer cs n-lexer ('}':'\"':cs) n = RESCAPE : lexer cs n-lexer ('!':'=':cs) n = TNE : lexer cs n-lexer ('\'':cs) n = lexString cs n-lexer ('\"':cs) n = lexString2 cs n-lexer ('[':cs) n = LB : lexer cs n-lexer (']':cs) n = RB : lexer cs n-lexer ('(':cs) n = LP : lexer cs n-lexer (')':cs) n = RP : lexer cs n-lexer ('}':cs) [_,n] = RSB : lexer cs [n]-lexer ('}':cs) (_:n:ns) = RSB : (if n==0 then lexer cs (n:ns) else xml cs "" (n:ns))-lexer ('+':cs) n = PLUS : lexer cs n-lexer ('-':cs) n = MINUS : lexer cs n-lexer ('*':cs) n = TIMES : lexer cs n-lexer ('=':cs) n = TEQ : lexer cs n-lexer ('<':c:cs) n | not(isAlpha c) = TLT : lexer (c:cs) n-lexer ('<':cs) (k:n) = TLT : lexer cs (k+2:n)-lexer ('>':cs) (k:n) = TGT : (if k==1 then lexer cs (0:n) else xml cs "" (k-1:n))-lexer (',':cs) n = COMMA : lexer cs n-lexer ('@':cs) n = ATSIGN : lexer cs n-lexer ('/':cs) n = SLASH : lexer cs n-lexer ('{':cs) n = LSB : lexer cs (0:n)-lexer ('|':cs) n = UNION : lexer cs n-lexer (';':cs) n = SEMI : lexer cs n-lexer (c:cs) n = error ("illegal character "++[c])--lexNum cs n = if null rest || head rest /= '.'- then TInteger (read k) : lexer rest n- else let (m,rest2) = span isDigit (tail rest)- val::Float = read (k++('.':m))- in case rest2 of- ('e':rest3) -> let (exp,rest4) = span isDigit rest3- in (TFloat (val*10^(read exp))) : lexer rest4 n- _ -> (TFloat val) : lexer rest2 n- where (k,rest) = span isDigit cs--lexString cs n = TString s : lexer (tail rest) n- where (s,rest) = span inString cs- inString c = c /= '\''--lexString2 cs n = TString s : lexer (tail rest) n- where (s,rest) = span inString cs- inString c = c /= '\"'--lexComment (':':')':cs) n = lexer cs n-lexComment (_:cs) n = lexComment cs n-lexComment [] n = []--lexXmlComment ('-':'>':cs) text n = (xmlText (text++"->"))++(lexer cs n)-lexXmlComment (c:cs) text n = lexXmlComment cs (text++[c]) n-lexXmlComment [] text _ = xmlText text-+happyIn5 :: (Ast) -> (HappyAbsSyn )+happyIn5 x = unsafeCoerce# x+{-# INLINE happyIn5 #-}+happyOut5 :: (HappyAbsSyn ) -> (Ast)+happyOut5 x = unsafeCoerce# x+{-# INLINE happyOut5 #-}+happyIn6 :: ([ Ast ]) -> (HappyAbsSyn )+happyIn6 x = unsafeCoerce# x+{-# INLINE happyIn6 #-}+happyOut6 :: (HappyAbsSyn ) -> ([ Ast ])+happyOut6 x = unsafeCoerce# x+{-# INLINE happyOut6 #-}+happyIn7 :: (Ast) -> (HappyAbsSyn )+happyIn7 x = unsafeCoerce# x+{-# INLINE happyIn7 #-}+happyOut7 :: (HappyAbsSyn ) -> (Ast)+happyOut7 x = unsafeCoerce# x+{-# INLINE happyOut7 #-}+happyIn8 :: (Ast) -> (HappyAbsSyn )+happyIn8 x = unsafeCoerce# x+{-# INLINE happyIn8 #-}+happyOut8 :: (HappyAbsSyn ) -> (Ast)+happyOut8 x = unsafeCoerce# x+{-# INLINE happyOut8 #-}+happyIn9 :: ([ Ast ]) -> (HappyAbsSyn )+happyIn9 x = unsafeCoerce# x+{-# INLINE happyIn9 #-}+happyOut9 :: (HappyAbsSyn ) -> ([ Ast ])+happyOut9 x = unsafeCoerce# x+{-# INLINE happyOut9 #-}+happyIn10 :: (Ast -> Ast) -> (HappyAbsSyn )+happyIn10 x = unsafeCoerce# x+{-# INLINE happyIn10 #-}+happyOut10 :: (HappyAbsSyn ) -> (Ast -> Ast)+happyOut10 x = unsafeCoerce# x+{-# INLINE happyOut10 #-}+happyIn11 :: (Ast -> Ast) -> (HappyAbsSyn )+happyIn11 x = unsafeCoerce# x+{-# INLINE happyIn11 #-}+happyOut11 :: (HappyAbsSyn ) -> (Ast -> Ast)+happyOut11 x = unsafeCoerce# x+{-# INLINE happyOut11 #-}+happyIn12 :: (Ast -> Ast) -> (HappyAbsSyn )+happyIn12 x = unsafeCoerce# x+{-# INLINE happyIn12 #-}+happyOut12 :: (HappyAbsSyn ) -> (Ast -> Ast)+happyOut12 x = unsafeCoerce# x+{-# INLINE happyOut12 #-}+happyIn13 :: (Ast -> Ast) -> (HappyAbsSyn )+happyIn13 x = unsafeCoerce# x+{-# INLINE happyIn13 #-}+happyOut13 :: (HappyAbsSyn ) -> (Ast -> Ast)+happyOut13 x = unsafeCoerce# x+{-# INLINE happyOut13 #-}+happyIn14 :: (( Ast -> Ast, Ast -> Ast )) -> (HappyAbsSyn )+happyIn14 x = unsafeCoerce# x+{-# INLINE happyIn14 #-}+happyOut14 :: (HappyAbsSyn ) -> (( Ast -> Ast, Ast -> Ast ))+happyOut14 x = unsafeCoerce# x+{-# INLINE happyOut14 #-}+happyIn15 :: (( [ Ast ], [ Ast ] )) -> (HappyAbsSyn )+happyIn15 x = unsafeCoerce# x+{-# INLINE happyIn15 #-}+happyOut15 :: (HappyAbsSyn ) -> (( [ Ast ], [ Ast ] ))+happyOut15 x = unsafeCoerce# x+{-# INLINE happyOut15 #-}+happyIn16 :: (Ast) -> (HappyAbsSyn )+happyIn16 x = unsafeCoerce# x+{-# INLINE happyIn16 #-}+happyOut16 :: (HappyAbsSyn ) -> (Ast)+happyOut16 x = unsafeCoerce# x+{-# INLINE happyOut16 #-}+happyIn17 :: (Ast) -> (HappyAbsSyn )+happyIn17 x = unsafeCoerce# x+{-# INLINE happyIn17 #-}+happyOut17 :: (HappyAbsSyn ) -> (Ast)+happyOut17 x = unsafeCoerce# x+{-# INLINE happyOut17 #-}+happyIn18 :: (Ast) -> (HappyAbsSyn )+happyIn18 x = unsafeCoerce# x+{-# INLINE happyIn18 #-}+happyOut18 :: (HappyAbsSyn ) -> (Ast)+happyOut18 x = unsafeCoerce# x+{-# INLINE happyOut18 #-}+happyIn19 :: ([ Ast ]) -> (HappyAbsSyn )+happyIn19 x = unsafeCoerce# x+{-# INLINE happyIn19 #-}+happyOut19 :: (HappyAbsSyn ) -> ([ Ast ])+happyOut19 x = unsafeCoerce# x+{-# INLINE happyOut19 #-}+happyIn20 :: ([ Ast ]) -> (HappyAbsSyn )+happyIn20 x = unsafeCoerce# x+{-# INLINE happyIn20 #-}+happyOut20 :: (HappyAbsSyn ) -> ([ Ast ])+happyOut20 x = unsafeCoerce# x+{-# INLINE happyOut20 #-}+happyIn21 :: ([ Ast ]) -> (HappyAbsSyn )+happyIn21 x = unsafeCoerce# x+{-# INLINE happyIn21 #-}+happyOut21 :: (HappyAbsSyn ) -> ([ Ast ])+happyOut21 x = unsafeCoerce# x+{-# INLINE happyOut21 #-}+happyIn22 :: (Ast) -> (HappyAbsSyn )+happyIn22 x = unsafeCoerce# x+{-# INLINE happyIn22 #-}+happyOut22 :: (HappyAbsSyn ) -> (Ast)+happyOut22 x = unsafeCoerce# x+{-# INLINE happyOut22 #-}+happyIn23 :: (Ast -> Ast) -> (HappyAbsSyn )+happyIn23 x = unsafeCoerce# x+{-# INLINE happyIn23 #-}+happyOut23 :: (HappyAbsSyn ) -> (Ast -> Ast)+happyOut23 x = unsafeCoerce# x+{-# INLINE happyOut23 #-}+happyIn24 :: (Ast -> Ast) -> (HappyAbsSyn )+happyIn24 x = unsafeCoerce# x+{-# INLINE happyIn24 #-}+happyOut24 :: (HappyAbsSyn ) -> (Ast -> Ast)+happyOut24 x = unsafeCoerce# x+{-# INLINE happyOut24 #-}+happyIn25 :: (String -> Ast -> [ Ast ]) -> (HappyAbsSyn )+happyIn25 x = unsafeCoerce# x+{-# INLINE happyIn25 #-}+happyOut25 :: (HappyAbsSyn ) -> (String -> Ast -> [ Ast ])+happyOut25 x = unsafeCoerce# x+{-# INLINE happyOut25 #-}+happyIn26 :: (String -> Ast -> Ast) -> (HappyAbsSyn )+happyIn26 x = unsafeCoerce# x+{-# INLINE happyIn26 #-}+happyOut26 :: (HappyAbsSyn ) -> (String -> Ast -> Ast)+happyOut26 x = unsafeCoerce# x+{-# INLINE happyOut26 #-}+happyIn27 :: (String -> Ast -> Ast) -> (HappyAbsSyn )+happyIn27 x = unsafeCoerce# x+{-# INLINE happyIn27 #-}+happyOut27 :: (HappyAbsSyn ) -> (String -> Ast -> Ast)+happyOut27 x = unsafeCoerce# x+{-# INLINE happyOut27 #-}+happyInTok :: Token -> (HappyAbsSyn )+happyInTok x = unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn ) -> Token+happyOutTok x = unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\xbe\x00\xbe\x00\x00\x00\x00\x00\x74\x02\x70\x00\x00\x00\x00\x00\xeb\xff\x00\x00\xfd\xff\x00\x00\x00\x00\x69\x01\x69\x01\xfa\x00\x82\x00\xfa\x00\xfa\x00\x00\x00\x70\x01\xfa\x00\x67\x01\x67\x01\x1c\x00\x16\x00\x37\x00\x84\x01\x76\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\xff\x47\x01\x00\x00\x3b\x00\x4f\x01\x46\x01\xff\xff\xfd\xff\x4d\x01\xfa\x00\x7d\x01\x4b\x01\xfa\x00\x7b\x01\x0c\x01\x11\x01\xe0\xff\x0f\x01\x00\x00\xf9\x00\x00\x00\x00\x00\x74\x02\x29\x00\x00\x00\x5a\x01\xf4\xff\xef\xff\x2b\x01\x00\x00\xfa\x00\x4d\x00\x24\x00\x00\x00\x02\x01\xed\x00\xed\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\x90\x02\x90\x02\x90\x02\xc2\x02\x90\x02\xa9\x02\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x50\x01\x00\x00\x00\x00\x00\x00\x00\x00\x25\x01\x25\x01\xda\x02\x74\x02\x04\x01\x00\x01\x2c\x01\xee\x00\x00\x00\x19\x00\xfa\x00\x0e\x00\xfb\xff\xe2\x00\x00\x00\x00\x00\x16\x01\x37\x00\x5b\x00\x00\x00\xa2\x01\x00\x00\xd5\x00\xfa\x00\xfa\x00\xfa\x00\x00\x00\xfa\x00\xdb\x00\xfe\x00\xfa\x00\xd2\x00\xd2\x00\xfa\x00\xfa\x00\x1e\x02\x05\x01\xfa\x00\xff\x01\x03\x01\xc6\x00\x08\x00\x00\x00\xd0\x00\xf0\x00\xb2\x00\x00\x00\x04\x00\xfa\x00\x00\x00\x00\x00\xeb\x00\x5f\x00\x00\x00\xe7\x00\x5c\x00\x74\x02\xc2\x00\xb7\x00\x74\x02\x09\x00\xcc\x00\x74\x02\x7f\x01\x74\x02\x74\x02\xde\xff\x00\x00\xda\x00\x37\x00\xda\x00\xc3\x00\x50\x00\x00\x00\xfa\x00\x9f\x00\x00\x00\x00\x00\xfa\x00\xfa\x00\x74\x02\x34\x01\xaa\x00\xc0\x00\x26\x00\x00\x00\x00\x00\xca\x00\xfa\x00\x8f\x00\xfa\x00\xfa\xff\xfa\x00\x00\x00\xfa\x00\xfa\x00\x00\x00\xfa\x00\x00\x00\xfa\x00\x74\x02\x02\x00\x00\x00\xba\x00\xfa\x00\xb8\x00\x7b\x00\x0c\x00\xfe\xff\x74\x02\x74\x02\x58\x02\xfa\x00\x00\x00\x74\x02\x90\x00\x74\x02\x00\x00\x00\x00\xfa\x00\x00\x00\x00\x00\x00\x00\x34\x01\xfa\x00\x3b\x02\x00\x00\x00\x00\x00\x00\x00\x00\xfa\x00\xe0\x01\x00\x00\xc1\x01\x00\x00\x74\x02\x00\x00\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\xa4\x00\x0d\x01\x00\x00\x00\x00\x00\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9c\x00\x00\x00\x00\x00\x9b\x00\x79\x00\x5a\x06\x9c\x03\x4d\x06\x40\x06\x00\x00\x00\x00\x33\x06\x73\x00\x67\x00\x00\x00\x00\x00\x15\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x00\x00\x00\xa0\x00\x87\x03\x98\x00\x00\x00\x26\x06\x00\x00\x00\x00\x19\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x00\x00\x00\x0c\x06\x12\x01\xbd\x00\x00\x00\x86\x00\x6b\x00\x5d\x00\xff\x05\xf2\x05\xe5\x05\xd8\x05\xcb\x05\xbe\x05\xb1\x05\xa4\x05\x97\x05\x8a\x05\x7d\x05\x70\x05\x63\x05\x56\x05\x49\x05\x3c\x05\x2f\x05\x22\x05\x15\x05\x08\x05\xfb\x04\xee\x04\xe1\x04\xd4\x04\xc7\x04\xba\x04\xad\x04\xa0\x04\x93\x04\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x72\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x71\x00\x86\x04\x79\x04\x6c\x04\x00\x00\x5f\x04\x00\x00\x00\x00\x52\x04\x60\x00\x5a\x00\x45\x04\x5d\x03\x00\x00\x00\x00\x48\x03\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x00\x38\x04\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\xd6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x03\x00\x00\x00\x00\x00\x00\x1e\x03\x2b\x04\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x04\x2b\x00\x11\x04\x00\x00\x04\x04\x00\x00\xf7\x03\xea\x03\x00\x00\x11\x03\x00\x00\xfc\x02\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x03\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x03\x00\x00\x00\x00\x00\x00\x07\x00\xb6\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\x00\x00\x00\x00\x00\x00\x8e\xff\xfa\xff\xbd\xff\xed\xff\xee\xff\x00\x00\xef\xff\x9e\xff\x93\xff\x91\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\xff\x00\x00\x8d\xff\xf4\xff\xcc\xff\xcb\xff\xcd\xff\x00\x00\xfe\xff\xfd\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9d\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\xff\x00\x00\xc8\xff\xce\xff\xac\xff\xcf\xff\xd0\xff\xca\xff\x00\x00\x8b\xff\x00\x00\x00\x00\x00\x00\x9c\xff\x9a\xff\x00\x00\x00\x00\x00\x00\xb1\xff\xbb\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\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\xd1\xff\xd2\xff\xd3\xff\xd4\xff\xd5\xff\xd6\xff\xd7\xff\xd8\xff\xd9\xff\xda\xff\xdb\xff\xdc\xff\xdd\xff\xde\xff\xdf\xff\xe0\xff\xe1\xff\xe2\xff\xe3\xff\xe4\xff\xe5\xff\xe6\xff\xe7\xff\xe8\xff\xe9\xff\xea\xff\xeb\xff\xec\xff\xbe\xff\xc5\xff\xc6\xff\x00\x00\x00\x00\xa7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\xff\xa9\xff\x98\xff\x00\x00\x00\x00\x94\xff\x00\x00\x99\xff\x00\x00\x00\x00\x00\x00\x00\x00\x8c\xff\x00\x00\xab\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\xff\x00\x00\x89\xff\x00\x00\x00\x00\xfc\xff\xfb\xff\x00\x00\x00\x00\x8a\xff\xb4\xff\x00\x00\x00\x00\xb5\xff\x00\x00\x00\x00\xc0\xff\x00\x00\x00\x00\xc4\xff\x00\x00\x00\x00\xc9\xff\x00\x00\xf1\xff\xf2\xff\x00\x00\x92\xff\x96\xff\x00\x00\x97\xff\x00\x00\x00\x00\xa3\xff\x00\x00\x00\x00\xa4\xff\xa5\xff\x00\x00\x00\x00\xf3\xff\xb6\xff\xbc\xff\x00\x00\x00\x00\xaa\xff\xb2\xff\x95\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\xff\x00\x00\x00\x00\xae\xff\x00\x00\xad\xff\x00\x00\xf9\xff\x00\x00\xf6\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\xff\xc3\xff\x00\x00\x00\x00\xa0\xff\xf0\xff\x00\x00\xc2\xff\xa6\xff\xb3\xff\x00\x00\xba\xff\xb8\xff\xb7\xff\xb6\xff\x00\x00\x00\x00\xa1\xff\xb0\xff\xaf\xff\xf5\xff\x00\x00\x00\x00\xf7\xff\x00\x00\x9f\xff\xc1\xff\xb9\xff\xf8\xff"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x02\x00\x03\x00\x04\x00\x07\x00\x1a\x00\x0b\x00\x0d\x00\x09\x00\x0a\x00\x0c\x00\x2d\x00\x0a\x00\x2d\x00\x0a\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x0c\x00\x43\x00\x03\x00\x0d\x00\x18\x00\x0c\x00\x0b\x00\x49\x00\x0e\x00\x0f\x00\x2e\x00\x40\x00\x09\x00\x40\x00\x0b\x00\x2e\x00\x38\x00\x0b\x00\x09\x00\x27\x00\x0b\x00\x39\x00\x0c\x00\x2b\x00\x2c\x00\x2e\x00\x39\x00\x03\x00\x0b\x00\x2e\x00\x18\x00\x0c\x00\x0a\x00\x35\x00\x36\x00\x2e\x00\x3c\x00\x3b\x00\x3a\x00\x2e\x00\x3c\x00\x18\x00\x02\x00\x03\x00\x04\x00\x09\x00\x42\x00\x48\x00\x44\x00\x09\x00\x46\x00\x47\x00\x48\x00\x44\x00\x12\x00\x3c\x00\x10\x00\x11\x00\x12\x00\x35\x00\x36\x00\x37\x00\x48\x00\x3c\x00\x18\x00\x2e\x00\x14\x00\x09\x00\x2e\x00\x3c\x00\x35\x00\x36\x00\x37\x00\x0c\x00\x03\x00\x45\x00\x12\x00\x03\x00\x48\x00\x27\x00\x03\x00\x09\x00\x08\x00\x2b\x00\x2c\x00\x0c\x00\x45\x00\x03\x00\x0c\x00\x48\x00\x12\x00\x03\x00\x08\x00\x35\x00\x36\x00\x07\x00\x3c\x00\x03\x00\x3a\x00\x03\x00\x3c\x00\x3d\x00\x42\x00\x07\x00\x44\x00\x03\x00\x42\x00\x2e\x00\x44\x00\x07\x00\x46\x00\x47\x00\x48\x00\x02\x00\x03\x00\x04\x00\x3a\x00\x3b\x00\x3c\x00\x2e\x00\x09\x00\x0a\x00\x2e\x00\x41\x00\x42\x00\x0a\x00\x44\x00\x10\x00\x11\x00\x12\x00\x3a\x00\x11\x00\x3c\x00\x02\x00\x03\x00\x18\x00\x2b\x00\x2c\x00\x42\x00\x03\x00\x44\x00\x30\x00\x14\x00\x07\x00\x03\x00\x00\x00\x01\x00\x09\x00\x03\x00\x04\x00\x27\x00\x06\x00\x13\x00\x14\x00\x2b\x00\x2c\x00\x13\x00\x14\x00\x0d\x00\x0e\x00\x0f\x00\x3e\x00\x3f\x00\x12\x00\x35\x00\x36\x00\x15\x00\x16\x00\x17\x00\x3a\x00\x2d\x00\x3c\x00\x44\x00\x02\x00\x03\x00\x04\x00\x0b\x00\x42\x00\x0b\x00\x44\x00\x09\x00\x46\x00\x47\x00\x48\x00\x0e\x00\x0f\x00\x10\x00\x10\x00\x11\x00\x12\x00\x07\x00\x01\x00\x44\x00\x03\x00\x04\x00\x18\x00\x06\x00\x2e\x00\x03\x00\x1a\x00\x3c\x00\x03\x00\x1a\x00\x0d\x00\x0e\x00\x0f\x00\x07\x00\x16\x00\x12\x00\x2d\x00\x27\x00\x15\x00\x16\x00\x17\x00\x2b\x00\x2c\x00\x15\x00\x16\x00\x17\x00\x15\x00\x16\x00\x17\x00\x2f\x00\x0b\x00\x35\x00\x36\x00\x03\x00\x0b\x00\x45\x00\x3a\x00\x09\x00\x3c\x00\x3d\x00\x02\x00\x03\x00\x04\x00\x2f\x00\x42\x00\x3b\x00\x44\x00\x09\x00\x46\x00\x47\x00\x48\x00\x15\x00\x16\x00\x17\x00\x10\x00\x11\x00\x12\x00\x0a\x00\x01\x00\x0a\x00\x03\x00\x04\x00\x18\x00\x06\x00\x16\x00\x03\x00\x44\x00\x3c\x00\x03\x00\x44\x00\x0d\x00\x0e\x00\x0f\x00\x07\x00\x3c\x00\x12\x00\x32\x00\x27\x00\x15\x00\x16\x00\x17\x00\x2b\x00\x2c\x00\x15\x00\x16\x00\x17\x00\x15\x00\x16\x00\x17\x00\x01\x00\x2e\x00\x35\x00\x36\x00\x44\x00\x2e\x00\x31\x00\x3a\x00\x3c\x00\x3c\x00\x12\x00\x13\x00\x14\x00\x15\x00\x2f\x00\x42\x00\x2e\x00\x44\x00\x2e\x00\x46\x00\x47\x00\x48\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\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x05\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x3b\x00\x33\x00\x34\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\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x06\x00\x0b\x00\x3c\x00\x0b\x00\x3c\x00\x44\x00\x3c\x00\x45\x00\x09\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\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x08\x00\x44\x00\x3c\x00\x44\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\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\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\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\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\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\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\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\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\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\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\xff\xff\x27\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\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\xff\xff\xff\xff\x27\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\xff\xff\xff\xff\x12\x00\xff\xff\xff\xff\x15\x00\x16\x00\x17\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\x0b\x00\xff\xff\x0d\x00\x0e\x00\x0f\x00\xff\xff\xff\xff\x12\x00\xff\xff\xff\xff\x15\x00\x16\x00\x17\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\xff\xff\xff\xff\x12\x00\xff\xff\xff\xff\x15\x00\x16\x00\x17\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\xff\xff\xff\xff\x12\x00\xff\xff\xff\xff\x15\x00\x16\x00\x17\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\xff\xff\xff\xff\x12\x00\xff\xff\xff\xff\x15\x00\x16\x00\x17\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\xff\xff\xff\xff\x12\x00\xff\xff\xff\xff\x15\x00\x16\x00\x17\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\xff\xff\xff\xff\x12\x00\xff\xff\xff\xff\x15\x00\x16\x00\x17\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\x03\x00\x04\x00\x12\x00\x06\x00\xff\xff\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x0d\x00\x0e\x00\x0f\x00\xff\xff\xff\xff\x12\x00\xff\xff\xff\xff\x15\x00\x16\x00\x17\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\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\x0e\x00\x0f\x00\x10\x00\x41\x00\x43\x00\x2c\x00\xee\x00\x11\x00\xa8\x00\xfd\x00\xd6\x00\xe7\x00\x9c\x00\xe5\x00\x12\x00\x13\x00\x14\x00\xaf\x00\x05\x01\x26\x00\xfe\x00\xda\x00\x15\x00\xfe\x00\x2f\x00\xff\xff\xc6\x00\x08\x00\x94\x00\xd7\x00\x2b\x00\x9d\x00\x2c\x00\x94\x00\x44\x00\xc8\x00\x2e\x00\x16\x00\x2f\x00\x95\x00\xf5\x00\x17\x00\x18\x00\x99\x00\x96\x00\xf0\x00\x88\x00\xe8\x00\x15\x00\xf3\x00\x98\x00\x19\x00\x1a\x00\x99\x00\x2d\x00\x42\x00\x1b\x00\x99\x00\x1c\x00\x15\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x1e\x00\xef\x00\x1f\x00\x11\x00\x20\x00\x21\x00\x22\x00\x1f\x00\x14\x00\x30\x00\x12\x00\x13\x00\x14\x00\x89\x00\x8a\x00\xc9\x00\xdb\x00\x2d\x00\x15\x00\x99\x00\x92\x00\x11\x00\x99\x00\x30\x00\x89\x00\x8a\x00\x8b\x00\xd3\x00\xb6\x00\xca\x00\x14\x00\x30\x00\xcb\x00\x16\x00\xb7\x00\x11\x00\x81\x00\x17\x00\x18\x00\xde\x00\x8c\x00\x30\x00\xe0\x00\x8d\x00\x14\x00\x32\x00\x31\x00\x19\x00\x1a\x00\x82\x00\x1c\x00\xbf\x00\x1b\x00\x32\x00\x1c\x00\x1d\x00\x1e\x00\x33\x00\x1f\x00\x32\x00\x1e\x00\x99\x00\x1f\x00\x3c\x00\x20\x00\x21\x00\x22\x00\x0e\x00\x0f\x00\x10\x00\x8f\x00\x90\x00\x1c\x00\x99\x00\x11\x00\x3b\x00\x99\x00\x91\x00\x1e\x00\x83\x00\x1f\x00\x12\x00\x13\x00\x14\x00\xc3\x00\x99\x00\x1c\x00\xe2\x00\xe3\x00\x15\x00\x46\x00\x47\x00\x1e\x00\x32\x00\x1f\x00\x48\x00\x92\x00\x3d\x00\xa8\x00\x22\x00\x23\x00\x44\x00\x03\x00\x04\x00\x16\x00\x05\x00\xa5\x00\x3f\x00\x17\x00\x18\x00\x3e\x00\x3f\x00\x06\x00\x07\x00\x08\x00\x27\x00\x28\x00\x09\x00\x19\x00\x1a\x00\x0a\x00\x0b\x00\x0c\x00\x1b\x00\xfa\x00\x1c\x00\x1f\x00\x0e\x00\x0f\x00\x10\x00\x00\x01\x1e\x00\xe6\x00\x1f\x00\x11\x00\x20\x00\x21\x00\x22\x00\x85\x00\x08\x00\x86\x00\x12\x00\x13\x00\x14\x00\x41\x00\xaa\x00\x1f\x00\x03\x00\x04\x00\x15\x00\x05\x00\xf5\x00\x03\x00\xf4\x00\xd1\x00\x03\x00\xd4\x00\x06\x00\x07\x00\x08\x00\x41\x00\xd9\x00\x09\x00\xdc\x00\x16\x00\x0a\x00\x0b\x00\x0c\x00\x17\x00\x18\x00\xd4\x00\x0b\x00\x0c\x00\xc1\x00\x0b\x00\x0c\x00\xdd\x00\xdf\x00\x19\x00\x1a\x00\x03\x00\xe1\x00\xac\x00\x1b\x00\xad\x00\x1c\x00\x1d\x00\x0e\x00\x0f\x00\x10\x00\xae\x00\x1e\x00\x42\x00\x1f\x00\x11\x00\x20\x00\x21\x00\x22\x00\xc3\x00\x0b\x00\x0c\x00\x12\x00\x13\x00\x14\x00\xb0\x00\x02\x00\xb3\x00\x03\x00\x04\x00\x15\x00\x05\x00\xba\x00\x03\x00\x1f\x00\xbb\x00\x03\x00\x1f\x00\x06\x00\x07\x00\x08\x00\x41\x00\xc5\x00\x09\x00\xcc\x00\x16\x00\x0a\x00\x0b\x00\x0c\x00\x17\x00\x18\x00\x8d\x00\x0b\x00\x0c\x00\x29\x00\x0b\x00\x0c\x00\xcd\x00\x94\x00\x19\x00\x1a\x00\x1f\x00\x9e\x00\x85\x00\x1b\x00\x9b\x00\x1c\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x9f\x00\x1e\x00\x94\x00\x1f\x00\x9e\x00\x20\x00\x21\x00\x22\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x97\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x42\x00\xf7\x00\xf8\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\xd8\x00\xa0\x00\xa2\x00\xa3\x00\xa5\x00\x1f\x00\xaa\x00\x25\x00\x29\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\xc1\x00\x1f\x00\x36\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x07\x01\x00\x00\x00\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x02\x01\x00\x00\x00\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\xb1\x00\x00\x00\x00\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\xb4\x00\x00\x00\x00\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x04\x01\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\xfc\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x00\x00\x61\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x03\x00\x38\x00\xe8\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x03\x00\x38\x00\xe9\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\xce\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\xcf\x00\x00\x00\x06\x00\x07\x00\x08\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x03\x00\x38\x00\xd1\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x03\x00\x38\x00\xb1\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x03\x00\x38\x00\xb4\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x03\x00\x38\x00\xc5\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x03\x00\x38\x00\xa6\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x03\x00\x38\x00\x39\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x02\x01\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x04\x01\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\xf8\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\xfa\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x00\x01\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\xea\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\xeb\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\xec\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\xef\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\xf1\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\xcd\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\xe1\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\xb5\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\xb8\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\xbb\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\xbc\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\xbd\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\xbe\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x64\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x65\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x66\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x67\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x68\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x69\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x6a\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x6b\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x6c\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x6d\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x6e\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x6f\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x70\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x71\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x72\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x73\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x74\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x75\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x76\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x77\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x78\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x79\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x7a\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x7b\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x7c\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x7d\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x7e\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x7f\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x80\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x91\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\xa0\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\xa3\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x34\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x36\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x37\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x03\x00\x3b\x00\x09\x00\x05\x00\x00\x00\x0a\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x0c\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\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 (1, 118) [+ (1 , happyReduce_1),+ (2 , happyReduce_2),+ (3 , happyReduce_3),+ (4 , happyReduce_4),+ (5 , happyReduce_5),+ (6 , happyReduce_6),+ (7 , happyReduce_7),+ (8 , happyReduce_8),+ (9 , happyReduce_9),+ (10 , happyReduce_10),+ (11 , happyReduce_11),+ (12 , happyReduce_12),+ (13 , happyReduce_13),+ (14 , happyReduce_14),+ (15 , happyReduce_15),+ (16 , happyReduce_16),+ (17 , happyReduce_17),+ (18 , happyReduce_18),+ (19 , happyReduce_19),+ (20 , happyReduce_20),+ (21 , happyReduce_21),+ (22 , happyReduce_22),+ (23 , happyReduce_23),+ (24 , happyReduce_24),+ (25 , happyReduce_25),+ (26 , happyReduce_26),+ (27 , happyReduce_27),+ (28 , happyReduce_28),+ (29 , happyReduce_29),+ (30 , happyReduce_30),+ (31 , happyReduce_31),+ (32 , happyReduce_32),+ (33 , happyReduce_33),+ (34 , happyReduce_34),+ (35 , happyReduce_35),+ (36 , happyReduce_36),+ (37 , happyReduce_37),+ (38 , happyReduce_38),+ (39 , happyReduce_39),+ (40 , happyReduce_40),+ (41 , happyReduce_41),+ (42 , happyReduce_42),+ (43 , happyReduce_43),+ (44 , happyReduce_44),+ (45 , happyReduce_45),+ (46 , happyReduce_46),+ (47 , happyReduce_47),+ (48 , happyReduce_48),+ (49 , happyReduce_49),+ (50 , happyReduce_50),+ (51 , happyReduce_51),+ (52 , happyReduce_52),+ (53 , happyReduce_53),+ (54 , happyReduce_54),+ (55 , happyReduce_55),+ (56 , happyReduce_56),+ (57 , happyReduce_57),+ (58 , happyReduce_58),+ (59 , happyReduce_59),+ (60 , happyReduce_60),+ (61 , happyReduce_61),+ (62 , happyReduce_62),+ (63 , happyReduce_63),+ (64 , happyReduce_64),+ (65 , happyReduce_65),+ (66 , happyReduce_66),+ (67 , happyReduce_67),+ (68 , happyReduce_68),+ (69 , happyReduce_69),+ (70 , happyReduce_70),+ (71 , happyReduce_71),+ (72 , happyReduce_72),+ (73 , happyReduce_73),+ (74 , happyReduce_74),+ (75 , happyReduce_75),+ (76 , happyReduce_76),+ (77 , happyReduce_77),+ (78 , happyReduce_78),+ (79 , happyReduce_79),+ (80 , happyReduce_80),+ (81 , happyReduce_81),+ (82 , happyReduce_82),+ (83 , happyReduce_83),+ (84 , happyReduce_84),+ (85 , happyReduce_85),+ (86 , happyReduce_86),+ (87 , happyReduce_87),+ (88 , happyReduce_88),+ (89 , happyReduce_89),+ (90 , happyReduce_90),+ (91 , happyReduce_91),+ (92 , happyReduce_92),+ (93 , happyReduce_93),+ (94 , happyReduce_94),+ (95 , happyReduce_95),+ (96 , happyReduce_96),+ (97 , happyReduce_97),+ (98 , happyReduce_98),+ (99 , happyReduce_99),+ (100 , happyReduce_100),+ (101 , happyReduce_101),+ (102 , happyReduce_102),+ (103 , happyReduce_103),+ (104 , happyReduce_104),+ (105 , happyReduce_105),+ (106 , happyReduce_106),+ (107 , happyReduce_107),+ (108 , happyReduce_108),+ (109 , happyReduce_109),+ (110 , happyReduce_110),+ (111 , happyReduce_111),+ (112 , happyReduce_112),+ (113 , happyReduce_113),+ (114 , happyReduce_114),+ (115 , happyReduce_115),+ (116 , happyReduce_116),+ (117 , happyReduce_117),+ (118 , happyReduce_118)+ ]++happy_n_terms = 74 :: Int+happy_n_nonterms = 24 :: Int++happyReduce_1 = happySpecReduce_1 0# happyReduction_1+happyReduction_1 happy_x_1+ = case happyOut5 happy_x_1 of { happy_var_1 -> + happyIn4+ ([happy_var_1]+ )}++happyReduce_2 = happySpecReduce_2 0# happyReduction_2+happyReduction_2 happy_x_2+ happy_x_1+ = case happyOut5 happy_x_1 of { happy_var_1 -> + happyIn4+ ([happy_var_1]+ )}++happyReduce_3 = happySpecReduce_3 0# happyReduction_3+happyReduction_3 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut4 happy_x_1 of { happy_var_1 -> + case happyOut5 happy_x_3 of { happy_var_3 -> + happyIn4+ (happy_var_1++[happy_var_3]+ )}}++happyReduce_4 = happyReduce 4# 0# happyReduction_4+happyReduction_4 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut4 happy_x_1 of { happy_var_1 -> + case happyOut5 happy_x_3 of { happy_var_3 -> + happyIn4+ (happy_var_1++[happy_var_3]+ ) `HappyStk` happyRest}}++happyReduce_5 = happySpecReduce_1 1# happyReduction_5+happyReduction_5 happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + happyIn5+ (happy_var_1+ )}++happyReduce_6 = happyReduce 5# 1# happyReduction_6+happyReduction_6 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut7 happy_x_3 of { happy_var_3 -> + case happyOut8 happy_x_5 of { happy_var_5 -> + happyIn5+ (Ast "variable" [happy_var_3,happy_var_5]+ ) `HappyStk` happyRest}}++happyReduce_7 = happyReduce 9# 1# happyReduction_7+happyReduction_7 (happy_x_9 `HappyStk`+ happy_x_8 `HappyStk`+ happy_x_7 `HappyStk`+ happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_3 of { (QName happy_var_3) -> + case happyOut6 happy_x_5 of { happy_var_5 -> + case happyOut8 happy_x_8 of { happy_var_8 -> + happyIn5+ (Ast "function" ([Avar happy_var_3,happy_var_8]++happy_var_5)+ ) `HappyStk` happyRest}}}++happyReduce_8 = happyReduce 8# 1# happyReduction_8+happyReduction_8 (happy_x_8 `HappyStk`+ happy_x_7 `HappyStk`+ happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_3 of { (QName happy_var_3) -> + case happyOut8 happy_x_7 of { happy_var_7 -> + happyIn5+ (Ast "function" [Avar happy_var_3,happy_var_7]+ ) `HappyStk` happyRest}}++happyReduce_9 = happySpecReduce_1 2# happyReduction_9+happyReduction_9 happy_x_1+ = case happyOut7 happy_x_1 of { happy_var_1 -> + happyIn6+ ([happy_var_1]+ )}++happyReduce_10 = happySpecReduce_3 2# happyReduction_10+happyReduction_10 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut6 happy_x_1 of { happy_var_1 -> + case happyOut7 happy_x_3 of { happy_var_3 -> + happyIn6+ (happy_var_1++[happy_var_3]+ )}}++happyReduce_11 = happySpecReduce_1 3# happyReduction_11+happyReduction_11 happy_x_1+ = case happyOutTok happy_x_1 of { (Variable happy_var_1) -> + happyIn7+ (Avar happy_var_1+ )}++happyReduce_12 = happyReduce 5# 4# happyReduction_12+happyReduction_12 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut10 happy_x_1 of { happy_var_1 -> + case happyOut13 happy_x_2 of { happy_var_2 -> + case happyOut14 happy_x_3 of { happy_var_3 -> + case happyOut8 happy_x_5 of { happy_var_5 -> + happyIn8+ ((snd happy_var_3) (happy_var_1 (happy_var_2 ((fst happy_var_3) happy_var_5)))+ ) `HappyStk` happyRest}}}}++happyReduce_13 = happyReduce 4# 4# happyReduction_13+happyReduction_13 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut11 happy_x_2 of { happy_var_2 -> + case happyOut8 happy_x_4 of { happy_var_4 -> + happyIn8+ (call "some" [happy_var_2 happy_var_4]+ ) `HappyStk` happyRest}}++happyReduce_14 = happyReduce 4# 4# happyReduction_14+happyReduction_14 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut11 happy_x_2 of { happy_var_2 -> + case happyOut8 happy_x_4 of { happy_var_4 -> + happyIn8+ (call "not" [call "some" [happy_var_2 (call "not" [happy_var_4])]]+ ) `HappyStk` happyRest}}++happyReduce_15 = happyReduce 6# 4# happyReduction_15+happyReduction_15 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut8 happy_x_2 of { happy_var_2 -> + case happyOut8 happy_x_4 of { happy_var_4 -> + case happyOut8 happy_x_6 of { happy_var_6 -> + happyIn8+ (call "if" [happy_var_2,happy_var_4,happy_var_6]+ ) `HappyStk` happyRest}}}++happyReduce_16 = happySpecReduce_1 4# happyReduction_16+happyReduction_16 happy_x_1+ = case happyOut22 happy_x_1 of { happy_var_1 -> + happyIn8+ (happy_var_1+ )}++happyReduce_17 = happySpecReduce_1 4# happyReduction_17+happyReduction_17 happy_x_1+ = case happyOut18 happy_x_1 of { happy_var_1 -> + happyIn8+ (happy_var_1+ )}++happyReduce_18 = happySpecReduce_1 4# happyReduction_18+happyReduction_18 happy_x_1+ = case happyOut17 happy_x_1 of { happy_var_1 -> + happyIn8+ (happy_var_1+ )}++happyReduce_19 = happySpecReduce_3 4# happyReduction_19+happyReduction_19 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "to" [happy_var_1,happy_var_3]+ )}}++happyReduce_20 = happySpecReduce_3 4# happyReduction_20+happyReduction_20 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "+" [happy_var_1,happy_var_3]+ )}}++happyReduce_21 = happySpecReduce_3 4# happyReduction_21+happyReduction_21 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "-" [happy_var_1,happy_var_3]+ )}}++happyReduce_22 = happySpecReduce_3 4# happyReduction_22+happyReduction_22 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "*" [happy_var_1,happy_var_3]+ )}}++happyReduce_23 = happySpecReduce_3 4# happyReduction_23+happyReduction_23 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "div" [happy_var_1,happy_var_3]+ )}}++happyReduce_24 = happySpecReduce_3 4# happyReduction_24+happyReduction_24 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "idiv" [happy_var_1,happy_var_3]+ )}}++happyReduce_25 = happySpecReduce_3 4# happyReduction_25+happyReduction_25 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "mod" [happy_var_1,happy_var_3]+ )}}++happyReduce_26 = happySpecReduce_3 4# happyReduction_26+happyReduction_26 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "=" [happy_var_1,happy_var_3]+ )}}++happyReduce_27 = happySpecReduce_3 4# happyReduction_27+happyReduction_27 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "!=" [happy_var_1,happy_var_3]+ )}}++happyReduce_28 = happySpecReduce_3 4# happyReduction_28+happyReduction_28 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "<" [happy_var_1,happy_var_3]+ )}}++happyReduce_29 = happySpecReduce_3 4# happyReduction_29+happyReduction_29 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "<=" [happy_var_1,happy_var_3]+ )}}++happyReduce_30 = happySpecReduce_3 4# happyReduction_30+happyReduction_30 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call ">" [happy_var_1,happy_var_3]+ )}}++happyReduce_31 = happySpecReduce_3 4# happyReduction_31+happyReduction_31 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call ">=" [happy_var_1,happy_var_3]+ )}}++happyReduce_32 = happySpecReduce_3 4# happyReduction_32+happyReduction_32 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "<<" [happy_var_1,happy_var_3]+ )}}++happyReduce_33 = happySpecReduce_3 4# happyReduction_33+happyReduction_33 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call ">>" [happy_var_1,happy_var_3]+ )}}++happyReduce_34 = happySpecReduce_3 4# happyReduction_34+happyReduction_34 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "is" [happy_var_1,happy_var_3]+ )}}++happyReduce_35 = happySpecReduce_3 4# happyReduction_35+happyReduction_35 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "eq" [happy_var_1,happy_var_3]+ )}}++happyReduce_36 = happySpecReduce_3 4# happyReduction_36+happyReduction_36 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "ne" [happy_var_1,happy_var_3]+ )}}++happyReduce_37 = happySpecReduce_3 4# happyReduction_37+happyReduction_37 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "lt" [happy_var_1,happy_var_3]+ )}}++happyReduce_38 = happySpecReduce_3 4# happyReduction_38+happyReduction_38 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "le" [happy_var_1,happy_var_3]+ )}}++happyReduce_39 = happySpecReduce_3 4# happyReduction_39+happyReduction_39 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "gt" [happy_var_1,happy_var_3]+ )}}++happyReduce_40 = happySpecReduce_3 4# happyReduction_40+happyReduction_40 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "ge" [happy_var_1,happy_var_3]+ )}}++happyReduce_41 = happySpecReduce_3 4# happyReduction_41+happyReduction_41 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "and" [happy_var_1,happy_var_3]+ )}}++happyReduce_42 = happySpecReduce_3 4# happyReduction_42+happyReduction_42 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "or" [happy_var_1,happy_var_3]+ )}}++happyReduce_43 = happySpecReduce_3 4# happyReduction_43+happyReduction_43 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "not" [happy_var_1,happy_var_3]+ )}}++happyReduce_44 = happySpecReduce_3 4# happyReduction_44+happyReduction_44 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "union" [happy_var_1,happy_var_3]+ )}}++happyReduce_45 = happySpecReduce_3 4# happyReduction_45+happyReduction_45 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "intersect" [happy_var_1,happy_var_3]+ )}}++happyReduce_46 = happySpecReduce_3 4# happyReduction_46+happyReduction_46 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn8+ (call "except" [happy_var_1,happy_var_3]+ )}}++happyReduce_47 = happySpecReduce_2 4# happyReduction_47+happyReduction_47 happy_x_2+ happy_x_1+ = case happyOut8 happy_x_2 of { happy_var_2 -> + happyIn8+ (call "uplus" [happy_var_2]+ )}++happyReduce_48 = happySpecReduce_2 4# happyReduction_48+happyReduction_48 happy_x_2+ happy_x_1+ = case happyOut8 happy_x_2 of { happy_var_2 -> + happyIn8+ (call "uminus" [happy_var_2]+ )}++happyReduce_49 = happySpecReduce_2 4# happyReduction_49+happyReduction_49 happy_x_2+ happy_x_1+ = case happyOut8 happy_x_2 of { happy_var_2 -> + happyIn8+ (call "not" [happy_var_2]+ )}++happyReduce_50 = happySpecReduce_1 4# happyReduction_50+happyReduction_50 happy_x_1+ = case happyOutTok happy_x_1 of { (TString happy_var_1) -> + happyIn8+ (Astring happy_var_1+ )}++happyReduce_51 = happySpecReduce_1 4# happyReduction_51+happyReduction_51 happy_x_1+ = case happyOutTok happy_x_1 of { (TInteger happy_var_1) -> + happyIn8+ (Aint happy_var_1+ )}++happyReduce_52 = happySpecReduce_1 4# happyReduction_52+happyReduction_52 happy_x_1+ = case happyOutTok happy_x_1 of { (TFloat happy_var_1) -> + happyIn8+ (Afloat happy_var_1+ )}++happyReduce_53 = happySpecReduce_1 5# happyReduction_53+happyReduction_53 happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + happyIn9+ ([happy_var_1]+ )}++happyReduce_54 = happySpecReduce_3 5# happyReduction_54+happyReduction_54 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut9 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn9+ (happy_var_1++[happy_var_3]+ )}}++happyReduce_55 = happySpecReduce_2 6# happyReduction_55+happyReduction_55 happy_x_2+ happy_x_1+ = case happyOut11 happy_x_2 of { happy_var_2 -> + happyIn10+ (happy_var_2+ )}++happyReduce_56 = happySpecReduce_2 6# happyReduction_56+happyReduction_56 happy_x_2+ happy_x_1+ = case happyOut12 happy_x_2 of { happy_var_2 -> + happyIn10+ (happy_var_2+ )}++happyReduce_57 = happySpecReduce_3 6# happyReduction_57+happyReduction_57 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut10 happy_x_1 of { happy_var_1 -> + case happyOut11 happy_x_3 of { happy_var_3 -> + happyIn10+ (happy_var_1 . happy_var_3+ )}}++happyReduce_58 = happySpecReduce_3 6# happyReduction_58+happyReduction_58 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut10 happy_x_1 of { happy_var_1 -> + case happyOut12 happy_x_3 of { happy_var_3 -> + happyIn10+ (happy_var_1 . happy_var_3+ )}}++happyReduce_59 = happySpecReduce_3 7# happyReduction_59+happyReduction_59 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut7 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn11+ (\x -> Ast "for" [happy_var_1,Avar "$",happy_var_3,x]+ )}}++happyReduce_60 = happyReduce 5# 7# happyReduction_60+happyReduction_60 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut7 happy_x_1 of { happy_var_1 -> + case happyOut7 happy_x_3 of { happy_var_3 -> + case happyOut8 happy_x_5 of { happy_var_5 -> + happyIn11+ (\x -> Ast "for" [happy_var_1,happy_var_3,happy_var_5,x]+ ) `HappyStk` happyRest}}}++happyReduce_61 = happyReduce 5# 7# happyReduction_61+happyReduction_61 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut11 happy_x_1 of { happy_var_1 -> + case happyOut7 happy_x_3 of { happy_var_3 -> + case happyOut8 happy_x_5 of { happy_var_5 -> + happyIn11+ (\x -> happy_var_1(Ast "for" [happy_var_3,Avar "$",happy_var_5,x])+ ) `HappyStk` happyRest}}}++happyReduce_62 = happyReduce 7# 7# happyReduction_62+happyReduction_62 (happy_x_7 `HappyStk`+ happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut11 happy_x_1 of { happy_var_1 -> + case happyOut7 happy_x_3 of { happy_var_3 -> + case happyOut7 happy_x_5 of { happy_var_5 -> + case happyOut8 happy_x_7 of { happy_var_7 -> + happyIn11+ (\x -> happy_var_1(Ast "for" [happy_var_3,happy_var_5,happy_var_7,x])+ ) `HappyStk` happyRest}}}}++happyReduce_63 = happySpecReduce_3 8# happyReduction_63+happyReduction_63 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut7 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn12+ (\x -> Ast "let" [happy_var_1,happy_var_3,x]+ )}}++happyReduce_64 = happyReduce 5# 8# happyReduction_64+happyReduction_64 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut12 happy_x_1 of { happy_var_1 -> + case happyOut7 happy_x_3 of { happy_var_3 -> + case happyOut8 happy_x_5 of { happy_var_5 -> + happyIn12+ (\x -> happy_var_1(Ast "let" [happy_var_3,happy_var_5,x])+ ) `HappyStk` happyRest}}}++happyReduce_65 = happySpecReduce_2 9# happyReduction_65+happyReduction_65 happy_x_2+ happy_x_1+ = case happyOut8 happy_x_2 of { happy_var_2 -> + happyIn13+ (\x -> Ast "predicate" [happy_var_2,x]+ )}++happyReduce_66 = happySpecReduce_0 9# happyReduction_66+happyReduction_66 = happyIn13+ (id+ )++happyReduce_67 = happySpecReduce_3 10# happyReduction_67+happyReduction_67 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut15 happy_x_3 of { happy_var_3 -> + happyIn14+ ((\x -> Ast "sortTuple" (x:(fst happy_var_3)),+ \x -> Ast "sort" (x:(snd happy_var_3)))+ )}++happyReduce_68 = happySpecReduce_0 10# happyReduction_68+happyReduction_68 = happyIn14+ ((id,id)+ )++happyReduce_69 = happySpecReduce_2 11# happyReduction_69+happyReduction_69 happy_x_2+ happy_x_1+ = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOut16 happy_x_2 of { happy_var_2 -> + happyIn15+ (([happy_var_1],[happy_var_2])+ )}}++happyReduce_70 = happyReduce 4# 11# happyReduction_70+happyReduction_70 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut15 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + case happyOut16 happy_x_4 of { happy_var_4 -> + happyIn15+ (((fst happy_var_1)++[happy_var_3],(snd happy_var_1)++[happy_var_4])+ ) `HappyStk` happyRest}}}++happyReduce_71 = happySpecReduce_1 12# happyReduction_71+happyReduction_71 happy_x_1+ = happyIn16+ (Avar "ascending"+ )++happyReduce_72 = happySpecReduce_1 12# happyReduction_72+happyReduction_72 happy_x_1+ = happyIn16+ (Avar "descending"+ )++happyReduce_73 = happySpecReduce_0 12# happyReduction_73+happyReduction_73 = happyIn16+ (Avar "ascending"+ )++happyReduce_74 = happyReduce 4# 13# happyReduction_74+happyReduction_74 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_3 of { (QName happy_var_3) -> + happyIn17+ (call "element" [Avar happy_var_3]+ ) `HappyStk` happyRest}++happyReduce_75 = happyReduce 4# 13# happyReduction_75+happyReduction_75 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_3 of { (QName happy_var_3) -> + happyIn17+ (call "attribute" [Avar happy_var_3]+ ) `HappyStk` happyRest}++happyReduce_76 = happyReduce 6# 14# happyReduction_76+happyReduction_76 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut19 happy_x_1 of { happy_var_1 -> + case happyOut20 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_5 of { (QName happy_var_5) -> + happyIn18+ (if head happy_var_1 == Astring happy_var_5+ then Ast "construction" (happy_var_1++[concatAll happy_var_3])+ else error("Unmatched tags in element construction: "++(show (head happy_var_1))++" '"++happy_var_5++"'")+ ) `HappyStk` happyRest}}}++happyReduce_77 = happyReduce 5# 14# happyReduction_77+happyReduction_77 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut19 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_4 of { (QName happy_var_4) -> + happyIn18+ (if head happy_var_1 == Astring happy_var_4+ then Ast "construction" (happy_var_1++[call "empty" []])+ else error("Unmatched tags in element construction: "++(show (head happy_var_1))++" '"++happy_var_4++"'")+ ) `HappyStk` happyRest}}++happyReduce_78 = happySpecReduce_2 14# happyReduction_78+happyReduction_78 happy_x_2+ happy_x_1+ = case happyOut19 happy_x_1 of { happy_var_1 -> + happyIn18+ (Ast "construction" (happy_var_1++[call "empty" []])+ )}++happyReduce_79 = happyReduce 7# 14# happyReduction_79+happyReduction_79 (happy_x_7 `HappyStk`+ happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut8 happy_x_3 of { happy_var_3 -> + case happyOut9 happy_x_6 of { happy_var_6 -> + happyIn18+ (Ast "element_construction" [happy_var_3,concatenateAll happy_var_6]+ ) `HappyStk` happyRest}}++happyReduce_80 = happyReduce 7# 14# happyReduction_80+happyReduction_80 (happy_x_7 `HappyStk`+ happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut8 happy_x_3 of { happy_var_3 -> + case happyOut9 happy_x_6 of { happy_var_6 -> + happyIn18+ (Ast "attribute_construction" [happy_var_3,concatenateAll happy_var_6]+ ) `HappyStk` happyRest}}++happyReduce_81 = happyReduce 5# 14# happyReduction_81+happyReduction_81 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_2 of { (QName happy_var_2) -> + case happyOut9 happy_x_4 of { happy_var_4 -> + happyIn18+ (Ast "element_construction" [Astring happy_var_2,concatenateAll happy_var_4]+ ) `HappyStk` happyRest}}++happyReduce_82 = happyReduce 5# 14# happyReduction_82+happyReduction_82 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_2 of { (QName happy_var_2) -> + case happyOut9 happy_x_4 of { happy_var_4 -> + happyIn18+ (Ast "attribute_construction" [Astring happy_var_2,concatenateAll happy_var_4]+ ) `HappyStk` happyRest}}++happyReduce_83 = happySpecReduce_2 15# happyReduction_83+happyReduction_83 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_2 of { (QName happy_var_2) -> + happyIn19+ ([Astring happy_var_2,Ast "attributes" []]+ )}++happyReduce_84 = happySpecReduce_3 15# happyReduction_84+happyReduction_84 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_2 of { (QName happy_var_2) -> + case happyOut21 happy_x_3 of { happy_var_3 -> + happyIn19+ ([Astring happy_var_2,Ast "attributes" happy_var_3]+ )}}++happyReduce_85 = happySpecReduce_3 16# happyReduction_85+happyReduction_85 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut9 happy_x_2 of { happy_var_2 -> + happyIn20+ ([concatenateAll happy_var_2]+ )}++happyReduce_86 = happySpecReduce_1 16# happyReduction_86+happyReduction_86 happy_x_1+ = case happyOutTok happy_x_1 of { (TString happy_var_1) -> + happyIn20+ ([Astring happy_var_1]+ )}++happyReduce_87 = happySpecReduce_1 16# happyReduction_87+happyReduction_87 happy_x_1+ = case happyOutTok happy_x_1 of { (XMLtext happy_var_1) -> + happyIn20+ ([Astring happy_var_1]+ )}++happyReduce_88 = happySpecReduce_1 16# happyReduction_88+happyReduction_88 happy_x_1+ = case happyOut18 happy_x_1 of { happy_var_1 -> + happyIn20+ ([happy_var_1]+ )}++happyReduce_89 = happyReduce 4# 16# happyReduction_89+happyReduction_89 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut20 happy_x_1 of { happy_var_1 -> + case happyOut9 happy_x_3 of { happy_var_3 -> + happyIn20+ (happy_var_1++[concatenateAll happy_var_3]+ ) `HappyStk` happyRest}}++happyReduce_90 = happySpecReduce_2 16# happyReduction_90+happyReduction_90 happy_x_2+ happy_x_1+ = case happyOut20 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (TString happy_var_2) -> + happyIn20+ (happy_var_1++[Astring happy_var_2]+ )}}++happyReduce_91 = happySpecReduce_2 16# happyReduction_91+happyReduction_91 happy_x_2+ happy_x_1+ = case happyOut20 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (XMLtext happy_var_2) -> + happyIn20+ (happy_var_1++[Astring happy_var_2]+ )}}++happyReduce_92 = happySpecReduce_2 16# happyReduction_92+happyReduction_92 happy_x_2+ happy_x_1+ = case happyOut20 happy_x_1 of { happy_var_1 -> + case happyOut18 happy_x_2 of { happy_var_2 -> + happyIn20+ (happy_var_1++[happy_var_2]+ )}}++happyReduce_93 = happySpecReduce_3 17# happyReduction_93+happyReduction_93 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (QName happy_var_1) -> + case happyOutTok happy_x_3 of { (TString happy_var_3) -> + happyIn21+ ([Ast "pair" [Astring happy_var_1,Astring happy_var_3]]+ )}}++happyReduce_94 = happyReduce 5# 17# happyReduction_94+happyReduction_94 (happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (QName happy_var_1) -> + case happyOut8 happy_x_4 of { happy_var_4 -> + happyIn21+ ([Ast "pair" [Astring happy_var_1,happy_var_4]]+ ) `HappyStk` happyRest}}++happyReduce_95 = happyReduce 4# 17# happyReduction_95+happyReduction_95 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut21 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (QName happy_var_2) -> + case happyOutTok happy_x_4 of { (TString happy_var_4) -> + happyIn21+ (happy_var_1++[Ast "pair" [Astring happy_var_2,Astring happy_var_4]]+ ) `HappyStk` happyRest}}}++happyReduce_96 = happyReduce 6# 17# happyReduction_96+happyReduction_96 (happy_x_6 `HappyStk`+ happy_x_5 `HappyStk`+ happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut21 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (QName happy_var_2) -> + case happyOut8 happy_x_5 of { happy_var_5 -> + happyIn21+ (happy_var_1++[Ast "pair" [Astring happy_var_2,happy_var_5]]+ ) `HappyStk` happyRest}}}++happyReduce_97 = happySpecReduce_1 18# happyReduction_97+happyReduction_97 happy_x_1+ = case happyOut25 happy_x_1 of { happy_var_1 -> + happyIn22+ (Ast "step" (happy_var_1 "child_step" (Avar "."))+ )}++happyReduce_98 = happySpecReduce_2 18# happyReduction_98+happyReduction_98 happy_x_2+ happy_x_1+ = case happyOut25 happy_x_2 of { happy_var_2 -> + happyIn22+ (Ast "step" (happy_var_2 "attribute_step" (Avar "."))+ )}++happyReduce_99 = happySpecReduce_2 18# happyReduction_99+happyReduction_99 happy_x_2+ happy_x_1+ = case happyOut25 happy_x_1 of { happy_var_1 -> + case happyOut23 happy_x_2 of { happy_var_2 -> + happyIn22+ (Ast "step" [happy_var_2 (Ast "step" (happy_var_1 "child_step" (Avar ".")))]+ )}}++happyReduce_100 = happySpecReduce_3 18# happyReduction_100+happyReduction_100 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut25 happy_x_2 of { happy_var_2 -> + case happyOut23 happy_x_3 of { happy_var_3 -> + happyIn22+ (Ast "step" (map happy_var_3 (happy_var_2 "attribute_step" (Avar ".")))+ )}}++happyReduce_101 = happySpecReduce_1 19# happyReduction_101+happyReduction_101 happy_x_1+ = case happyOut24 happy_x_1 of { happy_var_1 -> + happyIn23+ (happy_var_1+ )}++happyReduce_102 = happySpecReduce_2 19# happyReduction_102+happyReduction_102 happy_x_2+ happy_x_1+ = case happyOut23 happy_x_1 of { happy_var_1 -> + case happyOut24 happy_x_2 of { happy_var_2 -> + happyIn23+ (happy_var_2 . happy_var_1+ )}}++happyReduce_103 = happySpecReduce_2 20# happyReduction_103+happyReduction_103 happy_x_2+ happy_x_1+ = case happyOut25 happy_x_2 of { happy_var_2 -> + happyIn24+ (\e -> Ast "step" (happy_var_2 "child_step" e)+ )}++happyReduce_104 = happySpecReduce_3 20# happyReduction_104+happyReduction_104 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut25 happy_x_3 of { happy_var_3 -> + happyIn24+ (\e -> Ast "step" (happy_var_3 "attribute_step" e)+ )}++happyReduce_105 = happySpecReduce_3 20# happyReduction_105+happyReduction_105 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut25 happy_x_3 of { happy_var_3 -> + happyIn24+ (\e -> Ast "step" (happy_var_3 "descendant_step" e)+ )}++happyReduce_106 = happyReduce 4# 20# happyReduction_106+happyReduction_106 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut25 happy_x_4 of { happy_var_4 -> + happyIn24+ (\e -> Ast "step" (happy_var_4 "attribute_descendant_step" e)+ ) `HappyStk` happyRest}++happyReduce_107 = happySpecReduce_2 20# happyReduction_107+happyReduction_107 happy_x_2+ happy_x_1+ = happyIn24+ (\e -> Ast "step" [Ast "parent_step" [e]]+ )++happyReduce_108 = happySpecReduce_1 21# happyReduction_108+happyReduction_108 happy_x_1+ = case happyOut26 happy_x_1 of { happy_var_1 -> + happyIn25+ (\t e -> [happy_var_1 t e]+ )}++happyReduce_109 = happyReduce 4# 21# happyReduction_109+happyReduction_109 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOut25 happy_x_1 of { happy_var_1 -> + case happyOut8 happy_x_3 of { happy_var_3 -> + happyIn25+ (\t e -> (happy_var_1 t e)++[happy_var_3]+ ) `HappyStk` happyRest}}++happyReduce_110 = happySpecReduce_1 22# happyReduction_110+happyReduction_110 happy_x_1+ = case happyOut27 happy_x_1 of { happy_var_1 -> + happyIn26+ (\t e -> happy_var_1 t e+ )}++happyReduce_111 = happySpecReduce_1 22# happyReduction_111+happyReduction_111 happy_x_1+ = happyIn26+ (\t e -> Ast t [Astring "*",e]+ )++happyReduce_112 = happySpecReduce_1 22# happyReduction_112+happyReduction_112 happy_x_1+ = case happyOutTok happy_x_1 of { (QName happy_var_1) -> + happyIn26+ (\t e -> Ast t [Astring happy_var_1,e]+ )}++happyReduce_113 = happySpecReduce_1 23# happyReduction_113+happyReduction_113 happy_x_1+ = case happyOut7 happy_x_1 of { happy_var_1 -> + happyIn27+ (\_ _ -> happy_var_1+ )}++happyReduce_114 = happySpecReduce_1 23# happyReduction_114+happyReduction_114 happy_x_1+ = happyIn27+ (\_ e -> e+ )++happyReduce_115 = happySpecReduce_3 23# happyReduction_115+happyReduction_115 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOut9 happy_x_2 of { happy_var_2 -> + happyIn27+ (\t e -> if e == Avar "."+ then concatenateAll happy_var_2+ else Ast "context" [e,Astring t,concatenateAll happy_var_2]+ )}++happyReduce_116 = happySpecReduce_2 23# happyReduction_116+happyReduction_116 happy_x_2+ happy_x_1+ = happyIn27+ (\_ _ -> call "empty" []+ )++happyReduce_117 = happyReduce 4# 23# happyReduction_117+happyReduction_117 (happy_x_4 `HappyStk`+ happy_x_3 `HappyStk`+ happy_x_2 `HappyStk`+ happy_x_1 `HappyStk`+ happyRest)+ = case happyOutTok happy_x_1 of { (QName happy_var_1) -> + case happyOut9 happy_x_3 of { happy_var_3 -> + happyIn27+ (\_ e -> if e == Avar "."+ then call happy_var_1 happy_var_3+ else Ast "context" [e,call happy_var_1 happy_var_3]+ ) `HappyStk` happyRest}}++happyReduce_118 = happySpecReduce_3 23# happyReduction_118+happyReduction_118 happy_x_3+ happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { (QName happy_var_1) -> + happyIn27+ (if elem happy_var_1 ["text"]+ then \_ e -> call happy_var_1 [e]+ else \_ _ -> call happy_var_1 []+ )}++happyNewToken action sts stk [] =+ happyDoAction 73# notHappyAtAll action sts stk []++happyNewToken action sts stk (tk:tks) =+ let cont i = happyDoAction i tk action sts stk tks in+ case tk of {+ RETURN -> cont 1#;+ SOME -> cont 2#;+ EVERY -> cont 3#;+ IF -> cont 4#;+ THEN -> cont 5#;+ ELSE -> cont 6#;+ LB -> cont 7#;+ RB -> cont 8#;+ LP -> cont 9#;+ RP -> cont 10#;+ LSB -> cont 11#;+ RSB -> cont 12#;+ LESCAPE -> cont 13#;+ RESCAPE -> cont 14#;+ TO -> cont 15#;+ PLUS -> cont 16#;+ MINUS -> cont 17#;+ TIMES -> cont 18#;+ DIV -> cont 19#;+ IDIV -> cont 20#;+ MOD -> cont 21#;+ TEQ -> cont 22#;+ TNE -> cont 23#;+ TLT -> cont 24#;+ TLE -> cont 25#;+ TGT -> cont 26#;+ TGE -> cont 27#;+ PRE -> cont 28#;+ POST -> cont 29#;+ IS -> cont 30#;+ SEQ -> cont 31#;+ SNE -> cont 32#;+ SLT -> cont 33#;+ SLE -> cont 34#;+ SGT -> cont 35#;+ SGE -> cont 36#;+ AND -> cont 37#;+ OR -> cont 38#;+ NOT -> cont 39#;+ UNION -> cont 40#;+ INTERSECT -> cont 41#;+ EXCEPT -> cont 42#;+ FOR -> cont 43#;+ LET -> cont 44#;+ IN -> cont 45#;+ COMMA -> cont 46#;+ ASSIGN -> cont 47#;+ WHERE -> cont 48#;+ ORDER -> cont 49#;+ BY -> cont 50#;+ ASCENDING -> cont 51#;+ DESCENDING -> cont 52#;+ ELEMENT -> cont 53#;+ ATTRIBUTE -> cont 54#;+ STAG -> cont 55#;+ ETAG -> cont 56#;+ SATISFIES -> cont 57#;+ ATSIGN -> cont 58#;+ SLASH -> cont 59#;+ QName happy_dollar_dollar -> cont 60#;+ DECLARE -> cont 61#;+ FUNCTION -> cont 62#;+ VARIABLE -> cont 63#;+ AT -> cont 64#;+ DOTS -> cont 65#;+ DOT -> cont 66#;+ SEMI -> cont 67#;+ Variable happy_dollar_dollar -> cont 68#;+ XMLtext happy_dollar_dollar -> cont 69#;+ TInteger happy_dollar_dollar -> cont 70#;+ TFloat happy_dollar_dollar -> cont 71#;+ TString happy_dollar_dollar -> cont 72#;+ _ -> happyError' (tk:tks)+ }++happyError_ tk tks = happyError' (tk:tks)++newtype HappyIdentity a = HappyIdentity a+happyIdentity = HappyIdentity+happyRunIdentity (HappyIdentity a) = a++instance Monad HappyIdentity where+ return = HappyIdentity+ (HappyIdentity p) >>= q = q p++happyThen :: () => HappyIdentity a -> (a -> HappyIdentity b) -> HappyIdentity b+happyThen = (>>=)+happyReturn :: () => a -> HappyIdentity a+happyReturn = (return)+happyThen1 m k tks = (>>=) m (\a -> k a tks)+happyReturn1 :: () => a -> b -> HappyIdentity a+happyReturn1 = \a tks -> (return) a+happyError' :: () => [Token] -> HappyIdentity a+happyError' = HappyIdentity . parseError++parse tks = happyRunIdentity happySomeParser where+ happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut4 x))++happySeq = happyDontSeq+++-- Abstract Syntax Tree for XQueries+data Ast = Ast String [Ast]+ | Avar String+ | Aint Int+ | Afloat Float+ | Astring String+ deriving Eq+++instance Show Ast+ where show (Ast s []) = s ++ "()"+ show (Ast s (x:xs)) = s ++ "(" ++ (show x)+ ++ (foldr (\a r -> ","++(show a)++r) "" xs)+ ++ ")"+ show (Avar s) = s+ show (Aint n) = show n+ show (Afloat n) = show n+ show (Astring s) = "\'" ++ s ++ "\'"+++call :: String -> [Ast] -> Ast+call name args = Ast "call" ((Avar name):args)+++concatenateAll :: [Ast] -> Ast+concatenateAll (x:xs) = foldl (\a r -> call "concatenate" [a,r]) x xs+concatenateAll _ = call "empty" []+++concatAll :: [Ast] -> Ast+concatAll (x:xs) = foldl (\a r -> call "concat" [a,r]) x xs+concatAll _ = call "empty" []+++data Token+ = RETURN | SOME | EVERY | IF | THEN | ELSE | LB | RB | LP | RP | LSB | RSB+ | LESCAPE | RESCAPE | TO | PLUS | MINUS | TIMES | DIV | IDIV | MOD+ | TEQ | TNE | TLT | TLE | TGT | TGE | SEQ | SNE | SLT | SLE | SGT | SGE+ | AND | OR | NOT | UNION | INTERSECT | EXCEPT | FOR | LET | IN | COMMA+ | ASSIGN | WHERE | ORDER | BY | ASCENDING | DESCENDING | ELEMENT+ | ATTRIBUTE | STAG | ETAG | SATISFIES | ATSIGN | SLASH | DECLARE | SEMI+ | FUNCTION | VARIABLE |AT | DOT | DOTS | TokenEOF | PRE | POST | IS+ | QName String | Variable String | XMLtext String | TInteger Int+ | TFloat Float | TString String | TError String+ deriving Eq+++instance Show Token+ where show (QName s) = "QName("++s++")"+ show (Variable s) = "Variable("++s++")"+ show (XMLtext s) = "XMLtext("++s++")"+ show (TInteger n) = "Integer("++(show n)++")"+ show (TFloat n) = "Double("++(show n)++")"+ show (TString s) = "String("++s++")"+ show t = case filter (\(n,_) -> n==t) tokenList of+ (_,b):_ -> b+ _ -> "Illegal token"+++tokenList :: [(Token,String)]+tokenList = [(RETURN,"return"),(SOME,"some"),(EVERY,"every"),(IF,"if"),(THEN,"then"),(ELSE,"else"),+ (LB,"["),(RB,"]"),(LP,"("),(RP,")"),(LSB,"{"),(RSB,"}"),(LESCAPE,"\"{"),(RESCAPE,"}\""),+ (TO,"to"),(PLUS,"+"),(MINUS,"-"),(TIMES,"*"),(DIV,"div"),(IDIV,"idiv"),(MOD,"mod"),+ (TEQ,"="),(TNE,"!="),(TLT,"<"),(TLE,"<="),(TGT,">"),(TGE,">="),(PRE,"<<"),(POST,">>"),+ (IS,"is"),(SEQ,"eq"),(SNE,"ne"),(SLT,"lt"),(SLE,"le"),(SGT,"gt"),(SGE,"ge"),(AND,"and"),+ (OR,"or"),(NOT,"not"),(UNION,"union"),(INTERSECT,"intersect"),(EXCEPT,"except"),+ (FOR,"for"),(LET,"let"),(IN,"in"),(COMMA,"','"),(ASSIGN,":="),(WHERE,"where"),(ORDER,"order"),+ (BY,"by"),(ASCENDING,"ascending"),(DESCENDING,"descending"),(ELEMENT,"element"),+ (ATTRIBUTE,"attribute"),(STAG,"</"),(ETAG,"/>"),(SATISFIES,"satisfies"),(ATSIGN,"@"),+ (SLASH,"/"),(DECLARE,"declare"),(FUNCTION,"function"),(VARIABLE,"variable"),+ (AT,"at"),(DOTS,".."),(DOT,"."),(SEMI,";")]+++parseError [] = error "Reached end-of-input"+parseError [_] = error "Reached end-of-input"+parseError tk = error("Parse error: "++(show (take 10 (init tk))))+++scan :: String -> [Token]+scan cs = lexer cs [0]++xmlText :: String -> [Token]+xmlText "" = []+xmlText text = [XMLtext text]++-- scans XML syntax and returns an XMLtext token with the text+xml :: String -> String -> [Int] -> [Token]+xml ('{':cs) text n = (xmlText text)++(LSB : lexer cs (0:n))+xml ('<':'/':cs) text n = (xmlText text)++(STAG : lexer cs n)+xml ('<':'!':'-':cs) text n = xmlComment cs (text++"<!-") n+xml ('<':cs) text (k:n) = (xmlText text)++(TLT : lexer cs (k+2:n))+xml ('\'':'{':cs) text n = (xmlText text)++(LESCAPE : lexer cs n)+xml ('\"':'{':cs) text n = (xmlText text)++(LESCAPE : lexer cs n)+xml ('(':':':cs) text n = xqComment cs text n+xml (c:cs) text n = xml cs (text++[c]) n+xml [] text _ = xmlText text++xqComment :: String -> String -> [Int] -> [Token]+xqComment (':':')':cs) text n = xml cs text n+xqComment (_:cs) text n = xqComment cs text n+xqComment [] text _ = xmlText text++xmlComment :: String -> String -> [Int] -> [Token]+xmlComment ('-':'>':cs) text n = xml cs (text++"->") n+xmlComment (c:cs) text n = xmlComment cs (text++[c]) n+xmlComment [] text _ = xmlText text++isQN :: Char -> Bool+isQN c = elem c "_:-" || isDigit c || isAlpha c++isVar :: Char -> Bool+isVar c = elem c "_" || isDigit c || isAlpha c++-- the XQuery scanner+lexer :: String -> [Int] -> [Token]+lexer [] [0] = []+lexer [] _ = error "Unbalanced tags"+lexer (' ':'>':' ':cs) n = TGT : lexer cs n+lexer (c:cs) n+ | isSpace c = lexer cs n+ | isAlpha c = lexVar (c:cs) n+ | isDigit c = lexNum (c:cs) n+lexer ('$':c:cs) n | isAlpha c+ = let (var,rest) = span isVar (c:cs)+ in (Variable var) : lexer rest n+lexer ('\'':'{':cs) n = LESCAPE : lexer cs n+lexer ('\"':'{':cs) n = LESCAPE : lexer cs n+lexer (':':'=':cs) n = ASSIGN : lexer cs n+lexer ('<':'/':cs) n = STAG : lexer cs n+lexer ('<':'=':cs) n = TLE : lexer cs n+lexer ('>':'=':cs) n = TGE : lexer cs n+lexer ('<':'<':cs) n = PRE : lexer cs n+lexer ('>':'>':cs) n = POST : lexer cs n+lexer ('/':'>':cs) (k:n) = ETAG : lexer cs (k-2:n)+lexer ('(':':':cs) n = lexComment cs n+lexer ('<':'!':'-':cs) n = lexXmlComment cs "<!-" n+lexer ('.':'.':cs) n = DOTS : lexer cs n+lexer ('.':cs) n = DOT : lexer cs n+lexer ('}':'\'':cs) n = RESCAPE : lexer cs n+lexer ('}':'\"':cs) n = RESCAPE : lexer cs n+lexer ('!':'=':cs) n = TNE : lexer cs n+lexer ('\'':cs) n = lexString cs n+lexer ('\"':cs) n = lexString2 cs n+lexer ('[':cs) n = LB : lexer cs n+lexer (']':cs) n = RB : lexer cs n+lexer ('(':cs) n = LP : lexer cs n+lexer (')':cs) n = RP : lexer cs n+lexer ('}':cs) [_,n] = RSB : lexer cs [n]+lexer ('}':cs) (_:n:ns) = RSB : (if n==0 then lexer cs (n:ns) else xml cs "" (n:ns))+lexer ('+':cs) n = PLUS : lexer cs n+lexer ('-':cs) n = MINUS : lexer cs n+lexer ('*':cs) n = TIMES : lexer cs n+lexer ('=':cs) n = TEQ : lexer cs n+lexer ('<':c:cs) n | not(isAlpha c) = TLT : lexer (c:cs) n+lexer ('<':cs) (k:n) = TLT : lexer cs (k+2:n)+lexer ('>':cs) (k:n) = TGT : (if k==1 then lexer cs (0:n) else xml cs "" (k-1:n))+lexer (',':cs) n = COMMA : lexer cs n+lexer ('@':cs) n = ATSIGN : lexer cs n+lexer ('/':cs) n = SLASH : lexer cs n+lexer ('{':cs) n = LSB : lexer cs (0:n)+lexer ('|':cs) n = UNION : lexer cs n+lexer (';':cs) n = SEMI : lexer cs n+lexer (c:cs) n = error("Illegal character "++[c])++lexNum :: String -> [Int] -> [Token]+lexNum cs n = if null rest || head rest /= '.'+ then TInteger (read k) : lexer rest n+ else let (m,rest2) = span isDigit (tail rest)+ val::Float = read (k++('.':m))+ in case rest2 of+ ('e':rest3) -> let (exp,rest4) = span isDigit rest3+ in (TFloat (val*10^(read exp))) : lexer rest4 n+ _ -> (TFloat val) : lexer rest2 n+ where (k,rest) = span isDigit cs++lexString :: String -> [Int] -> [Token]+lexString cs n = TString s : lexer (tail rest) n+ where (s,rest) = span inString cs+ inString c = c /= '\''++lexString2 :: String -> [Int] -> [Token]+lexString2 cs n = TString s : lexer (tail rest) n+ where (s,rest) = span inString cs+ inString c = c /= '\"'++lexComment :: String -> [Int] -> [Token]+lexComment (':':')':cs) n = lexer cs n+lexComment (_:cs) n = lexComment cs n+lexComment [] n = []++lexXmlComment :: String -> String -> [Int] -> [Token]+lexXmlComment ('-':'>':cs) text n = (xmlText (text++"->"))++(lexer cs n)+lexXmlComment (c:cs) text n = lexXmlComment cs (text++[c]) n+lexXmlComment [] text _ = xmlText text++lexVar :: String -> [Int] -> [Token] lexVar cs n = case span isQN cs of ("return",rest) -> RETURN : lexer rest n
XQueryParser.y view
@@ -4,7 +4,7 @@ - Programmer: Leonidas Fegaras - Email: fegaras@cse.uta.edu - Web: http://lambda.uta.edu/-- Creation: 02/15/08, last update: 03/30/08+- Creation: 02/15/08, last update: 05/01/08 - - Copyright (c) 2008 by Leonidas Fegaras, the University of Texas at Arlington. All rights reserved. - This material is provided as is, with absolutely no warranty expressed or implied.@@ -112,15 +112,18 @@ %% prog :: { [ Ast ] }-prog : expr { [$1] }- | expr 'XMLtext' { [$1] }- | 'declare' 'variable' var- ':=' expr ';' prog { (Ast "variable" [$3,$5]):$7 }+prog : def { [$1] }+ | def 'XMLtext' { [$1] }+ | prog ';' def { $1++[$3] }+ | prog ';' def 'XMLtext' { $1++[$3] }++def :: { Ast }+def : expr { $1 }+ | 'declare' 'variable' var ':=' expr { Ast "variable" [$3,$5] } | 'declare' 'function' 'QName'- '(' params ')' - '{' expr '}' ';' prog { (Ast "function" ([Avar $3,$8]++$5)):$11 }+ '(' params ')' '{' expr '}' { Ast "function" ([Avar $3,$8]++$5) } | 'declare' 'function' 'QName'- '(' ')' '{' expr '}' ';' prog { (Ast "function" ([Avar $3,$7])):$10 }+ '(' ')' '{' expr '}' { Ast "function" [Avar $3,$7] } params :: { [ Ast ] } params : var { [$1] }@@ -223,10 +226,10 @@ element :: { Ast } element : stag '>' content '</' 'QName' '>' { if head $1 == Astring $5 then Ast "construction" ($1++[concatAll $3])- else error("Unmatched tags in element construction: "++$5) }+ else error("Unmatched tags in element construction: "++(show (head $1))++" '"++$5++"'") } | stag '>' '</' 'QName' '>' { if head $1 == Astring $4 then Ast "construction" ($1++[call "empty" []])- else error("Unmatched tags in element construction: "++$4) }+ else error("Unmatched tags in element construction: "++(show (head $1))++" '"++$4++"'") } | stag '/>' { Ast "construction" ($1++[call "empty" []]) } | 'element' '{' expr '}' '{' expl '}' { Ast "element_construction" [$3,concatenateAll $6] } | 'attribute' '{' expr '}''{' expl '}'{ Ast "attribute_construction" [$3,concatenateAll $6] }@@ -331,9 +334,6 @@ concatAll _ = call "empty" [] -parseError tk = error ("Parse error: "++(show (take 10 tk)))-- data Token = RETURN | SOME | EVERY | IF | THEN | ELSE | LB | RB | LP | RP | LSB | RSB | LESCAPE | RESCAPE | TO | PLUS | MINUS | TIMES | DIV | IDIV | MOD@@ -343,14 +343,45 @@ | ATTRIBUTE | STAG | ETAG | SATISFIES | ATSIGN | SLASH | DECLARE | SEMI | FUNCTION | VARIABLE |AT | DOT | DOTS | TokenEOF | PRE | POST | IS | QName String | Variable String | XMLtext String | TInteger Int- | TFloat Float | TString String- deriving Show+ | TFloat Float | TString String | TError String+ deriving Eq +instance Show Token+ where show (QName s) = "QName("++s++")"+ show (Variable s) = "Variable("++s++")"+ show (XMLtext s) = "XMLtext("++s++")"+ show (TInteger n) = "Integer("++(show n)++")"+ show (TFloat n) = "Double("++(show n)++")"+ show (TString s) = "String("++s++")"+ show t = case filter (\(n,_) -> n==t) tokenList of+ (_,b):_ -> b+ _ -> "Illegal token"+++tokenList :: [(Token,String)]+tokenList = [(RETURN,"return"),(SOME,"some"),(EVERY,"every"),(IF,"if"),(THEN,"then"),(ELSE,"else"),+ (LB,"["),(RB,"]"),(LP,"("),(RP,")"),(LSB,"{"),(RSB,"}"),(LESCAPE,"\"{"),(RESCAPE,"}\""),+ (TO,"to"),(PLUS,"+"),(MINUS,"-"),(TIMES,"*"),(DIV,"div"),(IDIV,"idiv"),(MOD,"mod"),+ (TEQ,"="),(TNE,"!="),(TLT,"<"),(TLE,"<="),(TGT,">"),(TGE,">="),(PRE,"<<"),(POST,">>"),+ (IS,"is"),(SEQ,"eq"),(SNE,"ne"),(SLT,"lt"),(SLE,"le"),(SGT,"gt"),(SGE,"ge"),(AND,"and"),+ (OR,"or"),(NOT,"not"),(UNION,"union"),(INTERSECT,"intersect"),(EXCEPT,"except"),+ (FOR,"for"),(LET,"let"),(IN,"in"),(COMMA,"','"),(ASSIGN,":="),(WHERE,"where"),(ORDER,"order"),+ (BY,"by"),(ASCENDING,"ascending"),(DESCENDING,"descending"),(ELEMENT,"element"),+ (ATTRIBUTE,"attribute"),(STAG,"</"),(ETAG,"/>"),(SATISFIES,"satisfies"),(ATSIGN,"@"),+ (SLASH,"/"),(DECLARE,"declare"),(FUNCTION,"function"),(VARIABLE,"variable"),+ (AT,"at"),(DOTS,".."),(DOT,"."),(SEMI,";")]+++parseError [] = error "Reached end-of-input"+parseError [_] = error "Reached end-of-input"+parseError tk = error("Parse error: "++(show (take 10 (init tk))))++ scan :: String -> [Token] scan cs = lexer cs [0] -+xmlText :: String -> [Token] xmlText "" = [] xmlText text = [XMLtext text] @@ -366,22 +397,26 @@ xml (c:cs) text n = xml cs (text++[c]) n xml [] text _ = xmlText text +xqComment :: String -> String -> [Int] -> [Token] xqComment (':':')':cs) text n = xml cs text n xqComment (_:cs) text n = xqComment cs text n xqComment [] text _ = xmlText text +xmlComment :: String -> String -> [Int] -> [Token] xmlComment ('-':'>':cs) text n = xml cs (text++"->") n xmlComment (c:cs) text n = xmlComment cs (text++[c]) n xmlComment [] text _ = xmlText text +isQN :: Char -> Bool isQN c = elem c "_:-" || isDigit c || isAlpha c +isVar :: Char -> Bool isVar c = elem c "_" || isDigit c || isAlpha c -- the XQuery scanner lexer :: String -> [Int] -> [Token] lexer [] [0] = []-lexer [] _ = error("Unbalanced tags")+lexer [] _ = error "Unbalanced tags" lexer (' ':'>':' ':cs) n = TGT : lexer cs n lexer (c:cs) n | isSpace c = lexer cs n@@ -427,8 +462,9 @@ lexer ('{':cs) n = LSB : lexer cs (0:n) lexer ('|':cs) n = UNION : lexer cs n lexer (';':cs) n = SEMI : lexer cs n-lexer (c:cs) n = error ("illegal character "++[c])+lexer (c:cs) n = error("Illegal character "++[c]) +lexNum :: String -> [Int] -> [Token] lexNum cs n = if null rest || head rest /= '.' then TInteger (read k) : lexer rest n else let (m,rest2) = span isDigit (tail rest)@@ -439,22 +475,27 @@ _ -> (TFloat val) : lexer rest2 n where (k,rest) = span isDigit cs +lexString :: String -> [Int] -> [Token] lexString cs n = TString s : lexer (tail rest) n where (s,rest) = span inString cs inString c = c /= '\'' +lexString2 :: String -> [Int] -> [Token] lexString2 cs n = TString s : lexer (tail rest) n where (s,rest) = span inString cs inString c = c /= '\"' +lexComment :: String -> [Int] -> [Token] lexComment (':':')':cs) n = lexer cs n lexComment (_:cs) n = lexComment cs n lexComment [] n = [] +lexXmlComment :: String -> String -> [Int] -> [Token] lexXmlComment ('-':'>':cs) text n = (xmlText (text++"->"))++(lexer cs n) lexXmlComment (c:cs) text n = lexXmlComment cs (text++[c]) n lexXmlComment [] text _ = xmlText text +lexVar :: String -> [Int] -> [Token] lexVar cs n = case span isQN cs of ("return",rest) -> RETURN : lexer rest n
+ XTree.hs view
@@ -0,0 +1,101 @@+{-------------------------------------------------------------------------------------+-+- XML Trees (rose trees)+- Programmer: Leonidas Fegaras+- Email: fegaras@cse.uta.edu+- Web: http://lambda.uta.edu/+- Creation: 05/01/08, last update: 05/01/08+- +- Copyright (c) 2008 by Leonidas Fegaras, the University of Texas at Arlington. All rights reserved.+- This material is provided as is, with absolutely no warranty expressed or implied.+- Any use is at your own risk. Permission is hereby granted to use or copy this program+- for any purpose, provided the above notices are retained on all copies.+-+--------------------------------------------------------------------------------------}+++{-# OPTIONS_GHC -funbox-strict-fields #-}+++module XTree where++import System.IO+import XMLParse(XMLEvent(..))+import HXML(AttList)+++type Tag = String+++-- A DOM-like tree to represent XML data+-- Int in XElem is the preorder numbering used for document order+data XTree = XElem !Tag !AttList !Int [XTree]+ | XText !String+ | XInt !Int+ | XFloat !Float+ | XBool !Bool+ | XPI Tag String -- processing instruction+ | XGERef Tag -- general entity reference+ | XComment String -- comment+ | XError String -- error report+ deriving Eq++type XSeq = [XTree]+++showAL :: AttList -> String+showAL = foldr(\(a,v) r -> " "++a++"=\""++v++"\""++r) []++showXT :: XTree -> Bool -> String+showXT e pad+ = case e of+ XElem tag al _ [] -> "<"++tag++(showAL al)++"/>"+ XElem tag al _ xs -> "<"++tag++(showAL al)++">"++(showXS xs)++"</"++tag++">"+ XText text -> text+ XInt n -> p++(show n)+ XFloat n -> p++(show n)+ XBool v -> p++(if v then "true" else "false")+ XComment s -> "<!--"++s++"-->"+ XPI n s -> "<?"++n++" "++s++">"+ XError s -> error s+ _ -> ""+ where p = if pad then " " else ""++showXS :: XSeq -> String+showXS [] = ""+showXS (x:xs) = (showXT x False) ++ (concatMap (\x -> showXT x True) xs)++instance Show XTree where+ show t = showXT t False+++-- print an XSeq without waiting+putXSeq :: XSeq -> IO ()+putXSeq xs = hSetBuffering stdout NoBuffering >> putStrLn (showXS xs)+++{--------------- Build the rose tree from the XML stream ----------------------------}+++type Stream = [XMLEvent]+++-- lazily materialize the SAX stream into a DOM tree+materialize :: Stream -> XTree+materialize stream = XElem "document" [] 1 [head (filter (\x -> case x of XElem _ _ _ _ -> True; _ -> False)+ ((\(x,_,_)->x) (ml stream 2)))]+ where m ((TextEvent t):xs) i = (XText t,xs,i)+ m ((EmptyEvent n atts):xs) i = (XElem n atts i [],xs,i+1)+ m ((StartEvent n atts):xs) i = let (el,xs',i') = ml xs (i+1)+ in (XElem n atts i el,xs',i')+ m ((PIEvent n s):xs) i = (XPI n s,xs,i)+ m ((CommentEvent s):xs) i = (XComment s,xs,i)+ m ((GERefEvent n):xs) i = (XGERef n,xs,i)+ m ((ErrorEvent s):xs) i = (XError s,xs,i)+ m (_:xs) i = (XError "unrecognized XML event",xs,i)+ m [] i = (XError "unbalanced tags",[],i)+ ml [] i = ([],[],i)+ ml ((EndEvent n):xs) i = ([],xs,i)+ ml xs i = let (e,xs',i') = m xs i+ (el,xs'',i'') = ml xs' i'+ in (e:el,xs'',i'')
− hxml-0.2/Arrow.hs
@@ -1,194 +0,0 @@----------------------------------------------------------------------------------- Module : HXML.Arrow--- Copyright : (C) 2000-2002 Joe English. Freely redistributable.--- License : "MIT-style"------ Author : Joe English <jenglish@flightlab.com>--- Stability : experimental--- Portability : portable------ CVS : $Id: Arrow.hs,v 1.8 2002/10/12 01:58:56 joe Exp $-------------------------------------------------------------------------------------- [30 Jan 1999]--- Arrow combinator library; inspired by John Hughes'--- "Generalizing Monads to Arrows"--module Arrow where--import Monad--infixr 5 +++-infixr 3 >&<, &&&-infixr 2 >|<, |||, ?>, >?>, :>-infixl 1 >>>--class Arrow a where- arr :: (b -> c) -> a b c- (>>>) :: a b c -> a c d -> a b d- apfst :: a b c -> a (b,x) (c,x)- apsnd :: a b c -> a (x,b) (x,c)- (>&<) :: a b c -> a d e -> a (b,d) (c,e)- (&&&) :: a b c -> a b d -> a b (c,d)- liftA2 :: (b -> c -> d) -> a e b -> a e c -> a e d- aConst :: c -> a b c- idArrow :: a b b- -- Minimal implementation: arr, >>>, apfst or >&<-- apsnd f = arr swap >>> apfst f >>> arr swap- where swap (x,y) = (y,x)- f >&< g = apfst f >>> apsnd g- -- OR: (arr fst >>> f) &&& (arr snd >>> g)- f &&& g = arr twin >>> (f >&< g)- where twin a = (a,a)- apfst f = f >&< arr id- liftA2 op f g = (f &&& g) >>> arr (uncurry op)- aConst c = arr (const c)- idArrow = arr id- -- swap :: (a,b) -> (b,a)- -- twin :: a -> (a,a)- -- uncurry :: (a -> b -> c) -> (a,b) -> c--data Choice a = a :> a-class (Arrow a) => ArrowChoice a where- apl :: a b c -> a (Either b d) (Either c d)- apr :: a b c -> a (Either d b) (Either d c)- (>|<) :: a b c -> a d e -> a (Either b d) (Either c e)- (|||) :: a b c -> a d c -> a (Either b d) c- ( ?>) :: (b -> Bool) -> Choice (a b c) -> a b c- (>?>) :: a b Bool -> Choice (a b c) -> a b c-- -- Minimal implementation: >|< or apl-- apl f = f >|< idArrow- apr f = arr mirror >>> apl f >>> arr mirror- where mirror = either Right Left- f >|< g = apl f >>> apr g- f ||| g = (f >|< g) >>> arr (either id id)-- p >?> (f :> g) = liftA2 lrtag p idArrow >>> (f ||| g)- where lrtag c = if c then Left else Right- p ?> choice = arr p >?> choice- -- mirror :: Either a b -> Either b a- -- lrtag :: Bool -> b -> Either b b---class (Arrow a) => ArrowApply a where- app :: a (a b c,b) c--class (Arrow a) => ArrowZero a where- aZero :: a b c- aMaybe :: a (Maybe c) c- aGuard :: (b -> Bool) -> a b b-- aGuard p = arr (\x -> if p x then Just x else Nothing) >>> aMaybe--{- Alternate interfaces:- aMaybe :: (b -> Maybe c) -> a b c- aMaybe :: a b (Maybe c) -> a b c- aGuard :: a b Bool -> a b b--}--class (Arrow a) => ArrowPlus a where- (+++) :: a b c -> a b c -> a b c--{- ************************************************************ -}--{- NOTE: comment this out if NHC98 1.10 gives you problems -}--instance Arrow (->) where- arr = id- f >>> g = \x -> g (f x) -- (>>>) = flip (.)- apfst f (x,y) = (f x, y)- apsnd g (x,y) = (x, g y)- f >&< g = \(x,y) -> (f x, g y)- f &&& g = \x -> (f x, g x)- liftA2 op f g x = op (f x) (g x)- aConst = const--instance ArrowChoice (->) where- f ||| g = either f g- f >|< g = either (Left . f) (Right . g)- apl f = either (Left . f) Right- apr f = either Left (Right . f)- p ?> (f :> g) = \x -> if p x then f x else g x--instance ArrowApply (->) where- app (f,x) = f x--{- END -}--{- ************************************************************ -}---- Reader arrow--newtype R a b c = R (a -> b -> c)-instance Arrow (R a) where- arr = R . const -- arr f = R (\a b -> f b)- R f >>> R g = R (\a -> g a . f a) -- R (\a b -> g a (f a b))- apfst (R f) = R (\a (x,y) -> (f a x,y))- apsnd (R f) = R (\a (x,y) -> (x,f a y))- R f >&< R g = R (\a (x,y) -> (f a x,g a y))- R f &&& R g = R (\a x -> (f a x,g a x))- liftA2 o (R f) (R g)= R (\a x -> o (f a x) (g a x))- aConst c = R (\_a _b -> c)--instance ArrowChoice (R a) where- R f >|< R g = R (\a -> either (Left . f a) (Right . g a))- R f ||| R g = R (\a -> either (f a) (g a))--readR :: (a -> c) -> R a b c-readR f = R (\a _b -> f a)--runR :: R a b c -> a -> b ->c-runR (R f) = f--{- ************************************************************ -}---- Monadic arrows (called "Kleisli" arrows in Hughes)--newtype MA m a b = MA (a -> m b)--runMA :: (Monad m) => (MA m a b) -> a -> m b-runMA (MA f) = f--reflectMA :: (Monad m) => (a -> m b) -> MA m a b-reflectMA = MA--aJoin :: (Monad m) => MA m (m a) a-aJoin = reflectMA id--instance (Monad m, Functor m) => Arrow (MA m) where- arr f = MA (return . f)- MA f >>> MA g = MA (\b -> f b >>= g)- MA f >&< MA g = MA (\(b,d) -> f b >>= \c-> g d >>= \e-> return (c,e))- MA f &&& MA g = MA (\b -> f b >>= \c-> g b >>= \e-> return (c,e))- apfst (MA f) = MA (\(b,d) -> f b >>= \c-> return (c,d))- apsnd (MA g) = MA (\(b,d) -> g d >>= \e-> return (b,e))- aConst c = MA (\_b -> return c)- idArrow = MA return- liftA2 op (MA f) (MA g)- = MA (\x -> f x >>= \l -> fmap (\r -> op l r) (g x))--instance (Monad m, Functor m) => ArrowChoice (MA m) where- MA f ||| MA g = MA (either f g)- MA f >|< MA g = MA (either (fmap Left . f) (fmap Right . g))- p ?> (MA f :> MA g) = MA (\x -> if p x then f x else g x)- apl (MA f) = MA (either (fmap Left . f) (return . Right))- apr (MA g) = MA (either (return . Left) (fmap Right . g))--instance (Monad m, Functor m) => ArrowApply (MA m) where- app = MA (\(MA f,x) -> f x)--instance (MonadPlus m, Functor m) => ArrowZero (MA m) where- aZero = MA (const mzero)- aMaybe = MA (maybe mzero return)- aGuard p = MA (\x -> if p x then return x else mzero)--instance (MonadPlus m, Functor m) => ArrowPlus (MA m) where- MA f +++ MA g = MA (\x -> mplus (f x) (g x))--{- ************************************************************ -}-
− hxml-0.2/Filter.hs
@@ -1,82 +0,0 @@----------------------------------------------------------------------------------- Module : HXML.Filter--- Copyright : (C) 2002 Joe English. Freely redistributable.--- License : "MIT-style"------ Author : Joe English <jenglish@flightlab.com>--- Stability : experimental--- Portability : portable------ CVS : $Id: Filter.hs,v 1.3 2002/10/12 01:58:57 joe Exp $-------------------------------------------------------------------------------------- | Filter arrows: @(a -> [b])@------ @Filter a b@ is essentially the same as the Monadic arrow @MA [] a b@,--- but it uses a different version of the bind operation at certain--- points to reduce heap drag.-----module Filter(Filter, runFilter, makeFilter, apFilter, aEach) where--import Arrow--newtype Filter a b = F (a -> [b])--runFilter :: Filter a b -> a -> [b]-runFilter (F f) = f--makeFilter :: (a -> [b]) -> Filter a b-makeFilter = F--apFilter :: ([a] -> [b]) -> Filter c a -> Filter c b-apFilter func filt = makeFilter (func . runFilter filt)--aEach :: Filter [a] a-aEach = makeFilter id--(!>>=) :: [a] -> (a -> [b]) -> [b]-[] !>>= _ = []-[x] !>>= f = f x-(x:xs) !>>= f = f x ++ (xs !>>= f)--wrap :: a -> [a]-wrap x = [x]--instance Arrow Filter where- arr f = F $ wrap . f- F f >>> F g = F $ concatMap g . f- F f >&< F g = F $ \(b,d) -> f b !>>= \c-> g d !>>= \e-> [(c,e)]- F f &&& F g = F $ \b -> f b !>>= \c-> g b !>>= \e-> [(c,e)]- apfst (F f) = F $ \(b,d) -> f b !>>= \c-> [(c,d)]- apsnd (F g) = F $ \(b,d) -> g d !>>= \e-> [(b,e)]- aConst c = F $ const [c]- idArrow = F wrap- liftA2 h (F f) (F g)= F $ \x -> f x !>>= \l -> map (h l) (g x)--instance ArrowChoice Filter where- F f ||| F g = F $ either f g- F f >|< F g = F $ either (map Left . f) (map Right . g)- apl (F f) = F $ either (map Left . f) (wrap . Right)- apr (F g) = F $ either (wrap . Left) (map Right . g)- p ?> (F f :> F g)= F $ \x -> if p x then f x else g x- F p >?> (F f :> F g)= F $ \x -> p x !>>= \c -> if c then f x else g x--instance ArrowZero Filter where- aZero = F (const [])- aMaybe = F (maybe [] wrap)- aGuard p = F (\x -> if p x then [x] else [])--instance ArrowPlus Filter where- F f +++ F g = F (\x -> f x ++ g x)--{- Alternate implementation:- type Filter a b = MA [] a b- runFilter = runMA- makeFilter = reflectMA- aEach = aJoin--}---- EOF --
hxml-0.2/Misc.hs view
@@ -44,9 +44,11 @@ maybeToList (Just a) = [a] -- ... other stuff+{- Removed by Leonidas Fegaras because it classes with the profiler instance Monad ((->) s) where -- Reader Monad return = const f >>= g = \x -> g (f x) x+-} lift :: (b->c->d) -> (a->b) -> (a->c) -> (a->d) lift f g h x = f (g x) (h x)
− hxml-0.2/NTree.hs
@@ -1,84 +0,0 @@----------------------------------------------------------------------------------- Module : HXML.NTree--- Copyright : (C) 2000-2002 Joe English. Freely redistributable.--- License : "MIT-style"------ Author : Joe English <jenglish@flightlab.com>--- Stability : experimental--- Portability : portable------ CVS : $Id: NTree.hs,v 1.3 2002/10/12 01:58:58 joe Exp $-------------------------------------------------------------------------------------- Description: "Navigable trees": allow a program to traverse --- up the tree as well as down.-----module NTree where--import Tree-import Misc (maybeStar, maybePlus, maybeToList, o)--data NTree a = NT- (Tree a) -- self- [NTree a] -- ancestors- [Tree a] -- previous siblings (in reverse order)- [Tree a] -- following siblings--ntree :: Tree a -> NTree a-ntree nd = NT nd [] [] []--subtreeNT :: NTree a -> Tree a-subtreeNT (NT nd _ _ _) = nd--dataNT :: NTree a -> a-dataNT (NT (Tree a _) _ _ _) = a--upNT, downNT, leftNT, rightNT :: NTree a -> Maybe (NTree a)--upNT (NT _ (p:_) _ _) = Just p-upNT (NT _ [] _ _) = Nothing-downNT t@(NT (Tree _ (c:cs)) u _ _) = Just (NT c (t:u) [] cs)-downNT (NT (Tree _ [] ) _ _ _) = Nothing-leftNT (NT s u (l:ls) r) = Just (NT l u ls (s:r))-leftNT (NT _ _ [] _) = Nothing-rightNT (NT s u l (r:rs)) = Just (NT r u (s:l) rs)-rightNT (NT _ _ _ [] ) = Nothing---- preorderNT t = t : concatMap preorderNT (children t)--- where children = maybe [] (maybeStar rightNT) . downNT-preorderNT :: NTree a -> [NTree a]-preorderNT = visit [] where- visit k t = t : maybe k (visit' k) (downNT t)- visit' k t = visit (maybe k (visit' k) (rightNT t)) t--revPreorderNT :: NTree a -> [NTree a]-revPreorderNT t = t : concatMap revPreorderNT (reverse (children t))- where children = maybe [] (maybeStar rightNT) . downNT---- XPath axes:--ancestorAxis, ancestorOrSelfAxis, childAxis,- descendantAxis, descendantOrSelfAxis,- followingAxis, followingSiblingAxis, parentAxis,- precedingAxis, precedingSiblingAxis, selfAxis - :: NTree a -> [NTree a]---- attributeAxis, namespaceAxis : not supported--parentAxis = maybeToList . upNT-ancestorAxis = \(NT _ u _ _) -> u -- or: maybePlus upNT-ancestorOrSelfAxis = \t@(NT _ u _ _) -> t:u -- or: maybeStar upNT-childAxis = maybe [] (maybeStar rightNT) . downNT-descendantAxis = tail . preorderNT -- concatMap preorderNT . childAxis-descendantOrSelfAxis = preorderNT-followingSiblingAxis = maybePlus rightNT-precedingSiblingAxis = maybePlus leftNT-selfAxis = wrap where wrap x = [x]--followingAxis = preorderNT `o` followingSiblingAxis `o` ancestorOrSelfAxis -precedingAxis = revPreorderNT `o` precedingSiblingAxis `o` ancestorOrSelfAxis---- EOF --
− hxml-0.2/XMLCombinators.hs
@@ -1,182 +0,0 @@----------------------------------------------------------------------------------- Module : XMLCombinators--- Copyright : (C) 2001,2002 Joe English. Freely redistributable.--- License : "MIT-style"------ Author : Joe English <jenglish@flightlab.com>--- Stability : experimental--- Portability : portable------ CVS : $Id: XMLCombinators.hs,v 1.6 2003/06/18 18:47:03 joe Exp $-------------------------------------------------------------------------------------- 2 Nov 2001; revised 5 Nov 2001 to use Arrows.-----module XMLCombinators- ( module Arrow, module Filter, module HXML- , xmlFilterMain, testFilter- , qSelf, qChildren, qDescendants, qSubtree- , qElem, qElems, qText, qEntity- , qAttval, qAttlist, qNodeName- , mkElem, mkElement- , mkText, mkLiteral- , mkAtt- , apChildren, keepText- , qInner, qOuter, qFirst- , qMatch, qTest- , aFoldTree, aScanTree- , (.//), (./), (|>|), (|?>), qChildElem- )- where--import Monad-import Arrow-import Filter-import HXML--infixr 2 |?> -- same as ?>, :>-infixl 1 ./, .// -- same as >>>------- Predicate adapters:-----qMatch :: Filter a b -> Filter a a-qMatch f = aGuard (not . null . runFilter f)--qTest :: Filter a b -> Filter a Bool-qTest f = makeFilter (return . not . null . runFilter f)--(|?>) :: Filter a x -> Choice (Filter a b) -> Filter a b-f |?> choice = (not . null . runFilter f) ?> choice------- Constructors:-----mkNode :: a -> Filter s (Tree a) -> Filter s (Tree a)-mkNode nd body = makeFilter (\x -> [Tree nd (runFilter body x)])--mkLiteral :: String -> Filter a XML-mkLiteral = aConst . leafNode . TXNode--mkElem :: Name -> Filter a XML -> Filter a XML-mkElem name = mkNode (ELNode name [])--mkElement :: Name -> Filter a (Name,String) -> Filter a XML -> Filter a XML-mkElement name atts body = arr $ \x ->- Tree (ELNode name (runFilter atts x)) (runFilter body x)--mkAtt :: Name -> Filter a String -> Filter a (Name,String)-mkAtt name val = aConst name &&& val--mkText :: Filter String XML-mkText = arr (leafNode . TXNode)------- Navigation:-----qChildren, qDescendants, qSubtree :: Filter (Tree a) (Tree a)-qChildren = makeFilter treeChildren-qSubtree = qSelf +++ (qChildren >>> qSubtree)-qDescendants = qChildren >>> qSubtree--qInner, qOuter :: Filter (Tree a) b -> Filter (Tree a) b-qOuter p = p |>| (qChildren >>> qOuter p)-qInner p = (qChildren >>> qInner p) |>| p---(|>|) :: Filter a b -> Filter a b -> Filter a b-f |>| g = makeFilter choose where- choose x = let fx = runFilter f x in if null fx then runFilter g x else fx--qFirst :: Filter a b -> Filter a b-qFirst = apFilter take1 where- take1 [] = []- take1 (x:_) = [x]------- Editing:-----apChildren :: Filter (Tree a) (Tree a) -> Filter (Tree a) (Tree a)-apChildren f = arr (\(Tree x ts) -> Tree x (ts >>= runFilter f))--aFoldTree, aScanTree :: Filter (Tree a) (Tree a) -> Filter (Tree a) (Tree a)--aFoldTree f = apChildren (aFoldTree f) >>> f-aScanTree f = f >>> apChildren (aScanTree f)------- Predicates:-----qElem :: Name -> Filter XML XML-qElem name = aGuard (q . treeRoot) where- q (ELNode gi _) = gi == name- q _ = False--qElems :: [Name] -> Filter XML XML -- = foldr1 (|>|) . map qElem-qElems gis = aGuard (test . treeRoot) where- test (ELNode gi _) = elem gi gis- test _ = False--qText :: Filter XML XML-qText = aGuard (isTXNode . treeRoot) where- isTXNode (TXNode _) = True- isTXNode _ = False--qEntity :: Filter XML XML-qEntity = aGuard (isENNode . treeRoot) where- isENNode (ENNode _) = True- isENNode _ = False--qSelf :: Filter x x-qSelf = arr id------- Extractions:-----keepText :: Filter XML XML-keepText = qSubtree >>> (qText |>| qEntity)--- ALT: arr stringValue >>> mkText--qAttval :: Name -> Filter XML String-qAttval name = arr (attval name) >>> aMaybe--qAttlist :: Filter XML (Name,String)-qAttlist = makeFilter attributes--qNodeName :: Filter XML Name-qNodeName = arr (nodeName . treeRoot) >>> aMaybe------- Shorthand:-----(./), (.//) :: Filter a XML -> String -> Filter a XML-f ./ gi = f >>> qChildren >>> qElem gi-f .// gi = f >>> qOuter (qElem gi)--qChildElem :: String -> Filter XML XML-qChildElem gi = qFirst (qChildren >>> qElem gi)------- Utilities:-----xmlFilterMain :: Filter XML XML -> IO ()-xmlFilterMain f =- getContents >>= mapM_ printXML . runFilter f . parseXML- >> putChar '\n'--testFilter :: FilePath -> Filter XML XML -> IO ()-testFilter filename f =- readFile filename >>= mapM_ printXML . runFilter f . parseXML---- EOF --
index.html view
@@ -7,7 +7,7 @@ <p> <h2>Description</h2> <p>-HXQ is a fast and space-efficient translator from XQuery (the standard+HXQ is a fast and space-efficient translator from <a href="http://www.w3.org/XML/Query/">XQuery</a> (the standard query language for XML) to embedded Haskell code. The translation is based on Haskell templates. HXQ takes full advantage of Haskell's lazy evaluation to keep in memory only those parts of XML data needed at@@ -29,7 +29,8 @@ HXQ uses the <a href="http://www.flightlab.com/~joe/hxml/">HXML parser for XML</a> (developed by Joe English), which is included in the source. I have also tried hexpat, tagsoup, HXT, and HaXML Xtract, but they all have space leaks.-For example, when I replaced the HXML parser with tagsoup in HXQ, it required more than 3GB heap space for the above query+For example, when I replaced the HXML parser with <a href="http://www-users.cs.york.ac.uk/~ndm/tagsoup/">tagsoup</a>+in HXQ, it required more than 3GB heap space for the above query and gave partial results. <p> <h2>Installation Instructions</h2>@@ -42,8 +43,16 @@ <pre> yum install ghc happy </pre>-Then download <a href="/HXQ-0.7.2.tar.gz">HXQ</a> and untar it.-You can either use cabal or make to build it. Then run xquery to test drive it.+Then download <a href="/HXQ-0.7.4.tar.gz">HXQ</a> and untar it.+You can use either make or cabal to build it. To build it with cabal, you do:+<pre>+runhaskell Setup.lhs configure --prefix=$HOME+runhaskell Setup.lhs build+runhaskell Setup.lhs install+</pre>+(The last command must be run as root.)+It will create the executable <tt>xquery</tt>, which is the XQuery interepreter, and the HXQ library.+To use the library, you run ghc or ghci with <tt>-package HXQ</tt>. <p> <h2>Current Status</h2> <p>@@ -88,9 +97,9 @@ ++" ': ', $x/title/text() " ++" }</paper> " ++" }</result> "))- putStrLn (show a)+ putXSeq a b <- $(xq " f( $a/paper[10], $a/paper[8] ) ")- putStrLn (show b)+ putXSeq b </pre> Another example, can be found in <a href="Test1.hs">Test1.hs</a>. <p>@@ -116,19 +125,20 @@ <pre> xquery data/q1.xq </pre> -Without an argument, it reads the XQuery from input.+Without an argument, it reads and evaluates XQueries and variable/function declarations from input. With <tt>xquery -p xpath-query xml-file</tt> you evaluate an XPath query against an XML file, eg. <tt>xquery -p "//inproceedings[100]" data/dblp.xml</tt>.-With <tt>xquery -help</tt> you get the list of system functions.+With <tt>xquery -help</tt> you get the list of system functions and usage information. <p>-<h2>Extending HXQ</h2>+There is an experimental+program, called <tt>hxqc</tt>, that works like <tt>xquery</tt> but is faster because it uses the+HXQ compiler instead of the interpreter. It's constracted with the Unix Makefile (<tt>make hxqc</tt>).+It is unstable and the <tt>hxqc</tt> executable is 10 times larger than <tt>xquery</tt> since it+uses the ghc libraries at run-time. Also, although it is faster than the interpreter, it is slower than a+compiled xquery since it uses part of the heap for the ghc compiler to compile Haskell code on-the-fly. <p>-If you want to extend HXQ, you need to read about <a href="http://www.haskell.org/bz/thdoc.htm">Template Haskell</a>.-Use <tt>make ghci</tt> to do various translation tests in ghci. You can look at the-Abstract Syntax Trees and the generated code from a query by evaluating-<tt>cq query</tt>. </body> <p> <hr> <p>-<address>Last modified: 04/23/08 by <a href="http://lambda.uta.edu/">Leonidas Fegaras</a></address>+<address>Last modified: 05/03/08 by <a href="http://lambda.uta.edu/">Leonidas Fegaras</a></address>
profile.hs view
@@ -2,6 +2,7 @@ module Main where +import XTree import XQueryParser import XQueryCompiler import XMLParse(parseDocument)