packages feed

clafer 0.3.10 → 0.4.0

raw patch · 42 files changed

+3225/−3297 lines, 42 filesdep +doctestdep −HaXmldep ~HTTPdep ~QuickCheckdep ~aeson

Dependencies added: doctest

Dependencies removed: HaXml

Dependency ranges changed: HTTP, QuickCheck, aeson, array, base, bytestring, clafer, cmdargs, containers, directory, filepath, lens, lens-aeson, network, network-uri, parsec, process, string-conversions, tasty, tasty-hunit, tasty-th, text, transformers

Files

CHANGES.md view
@@ -1,48 +1,47 @@-**Clafer Version 0.3.10 released on April 24, 2015**
+# Clafer Version 0.4.0 released on Jul 28, 2015
 
+[Release](https://github.com/gsdlab/clafer/pull/68)
+
+# Clafer Version 0.3.10 released on April 24, 2015
+
 [Release](https://github.com/gsdlab/clafer/pull/66)
 
-**Clafer Version 0.3.9 released on March 06, 2015**
+# Clafer Version 0.3.9 released on March 06, 2015
 
 [Release](https://github.com/gsdlab/clafer/pull/63)
 
-**Clafer Version 0.3.8 released on January 27, 2015**
+# Clafer Version 0.3.8 released on January 27, 2015
 
 [Release](https://github.com/gsdlab/clafer/pull/60)
 
-**Clafer Version 0.3.7 released on October 23, 2014**
+# Clafer Version 0.3.7 released on October 23, 2014
 
 [Release](https://github.com/gsdlab/clafer/pull/53)
 
-**Clafer Version 0.3.6.1 released on July 08, 2014**
+# Clafer Version 0.3.6.1 released on July 08, 2014
 
 [Release](https://github.com/gsdlab/clafer/pull/50)
 
-**Clafer Version 0.3.6 released on May 23, 2014**
+# Clafer Version 0.3.6 released on May 23, 2014
 
 [Release](https://github.com/gsdlab/clafer/pull/48)
 
-**Clafer Version 0.3.5 released on January 20, 2014**
+# Clafer Version 0.3.5 released on January 20, 2014
 
 [Release](https://github.com/gsdlab/clafer/pull/44)
 
-**Clafer Version 0.3.4 released on September 20, 2013**
+# Clafer Version 0.3.4 released on September 20, 2013
 
-**Clafer Version 0.3.3 released on August 14, 2013**
+# Clafer Version 0.3.3 released on August 14, 2013
 
 [Release](https://github.com/gsdlab/clafer/pull/35)
 
-**Clafer Version 0.3.2 released on April 11, 2013**
+# Clafer Version 0.3.2 released on April 11, 2013
 
-**Clafer Version 0.3.1 released on October 17, 2012**
+# Clafer Version 0.3.1 released on October 17, 2012
 
-**Clafer Version 0.3 released on July 17, 2012**
+# Clafer Version 0.3 released on July 17, 2012
 
 This was the first release of Clafer and included all code since the beginning of the project.
 
 Basic features - See the `README.md`.
-
-
-
-
-
Makefile view
@@ -15,15 +15,11 @@ 
 init:
 	cabal sandbox init --sandbox=../.clafertools-cabal-sandbox
-	# Uncomment to use Haskell LTS in the sandbox
-	# wget http://www.stackage.org/snapshot/lts-1.4/cabal.config
-	# mv cabal.config ../.clafertools-cabal-sandbox
-	# the constraint is there to prevent installing utf8-string-1 which conflicts with gitit, which requires utf8-string <= 0.3.8.
-	cabal install --only-dependencies $(MAC_USR_LIB) --enable-tests --constraint="utf8-string==0.3.8"
+	cabal install --only-dependencies $(MAC_USR_LIB) --enable-tests --constraint="vector == 0.10.12.3"
 
 build:
 	$(MAKE) -C $(TOOL_DIR)
-	cabal configure
+	cabal configure --enable-tests
 	cabal build
 
 install:
@@ -33,14 +29,13 @@ 	cp -f LICENSE $(to)/
 	cp -f CHANGES.md $(to)/clafer-CHANGES.md
 	cp -f tools/alloy4.2.jar $(to)/tools
-	cp -f tools/XsdCheck.class $(to)/tools
 	cp -f tools/ecore2clafer.jar $(to)/tools
-	cabal install --bindir=$(to) $(GPLK_LIBS_INCLUDES) $(MAC_USR_LIB) --ghc-option="-O2"
+	cabal install --bindir=$(to) $(GPLK_LIBS_INCLUDES) $(MAC_USR_LIB)
 
 # Removes current build and makes a clean new one (Don't use if starting from scratch!)
 cleanEnv:
 	make clean
-	ghc-pkg unregister clafer --package-db=../.clafertools-cabal-sandbox/x86_64-windows-ghc-7.8.3
+	cabal sandbox hc-pkg unregister clafer
 	rm `which clafer`
 	make
 
@@ -48,10 +43,6 @@ grammar:
 	$(MAKE) -C $(SRC_DIR) grammar
 
-# build Schema.hs from ClaferIG.xsd, call after .xsd changed
-Schema.hs:
-	$(MAKE) -C $(SRC_DIR) Schema.hs
-
 # build Css.hs from clafer.css, call after .css changed
 Css.hs:
 	$(MAKE) -C $(SRC_DIR) Css.hs
@@ -72,8 +63,8 @@ 	cabal test
 	$(MAKE) -C $(TEST_DIR) test
 
-generateAlloyJSPythonXMLXHTMLDot:
-	$(MAKE) -C $(TEST_DIR) generateAlloyJSPythonXMLXHTMLDot
+generateAlloyJSPythonHTMLDot:
+	$(MAKE) -C $(TEST_DIR) generateAlloyJSPythonHTMLDot
 
 diffRegressions:
 	$(MAKE) -C $(TEST_DIR) diffRegressions
@@ -93,3 +84,7 @@ 
 tags:
 	hasktags --ctags --extendedctag .
+
+codex:
+	codex update
+	mv codex.tags tags
README.md view
@@ -1,7 +1,6 @@-Clafer
-======
+# Clafer, the Language
 
-v0.3.10
+v0.4.0
 
 [Clafer](http://clafer.org) is a general-purpose lightweight structural modeling language developed by
 [GSD Lab](http://gsd.uwaterloo.ca/), [University of Waterloo](http://uwaterloo.ca), and
@@ -20,37 +19,33 @@ 3. *Domain Modeling* - aims at improving the understanding of the problem domain in the early stages of software development and determining the requirements with fewer defects.
 This is also known as *Concept Modeling* or *Ontology Modeling*.
 
-Clafer Compiler
-===============
+# Clafer, the Compiler
 
-Clafer compiler provides a reference language implementation.
-It translates models in Clafer to other formats (e.g., Alloy, XML, Python, JS, HTML, DOT) to allow for reasoning and processing with existing tools (Alloy Analyzer, Choco3, and Z3 SMT solver).
+Clafer compiler provides a reference implementation of Clafer, the language.
+It translates models in Clafer to other formats (e.g., Alloy, JSON, Python, JS, HTML, DOT) to allow for reasoning and processing with existing tools (Alloy Analyzer, Choco3, and Z3 SMT solver, GraphViz).
 
 Currently, the compiler is used by
 
 * Backends
   * Alloy-based Instance Generator ([ClaferIG](https://github.com/gsdlab/claferIG)),
-  * Choco3-based Instance Generator and Multi-Objective Optimizer ([chocosolver](https://github.com/gsdlab/chocosolver), [ClaferChocoIG](https://github.com/gsdlab/ClaferChocoIG)), and
-  * Z3-based Instance Generator and Multi-Objective Optimizer ([ClaferSMT](https://github.com/gsdlab/claferSMT)),
+  * Choco3-based Instance Generator and Multi-Objective Optimizer ([chocosolver](https://github.com/gsdlab/chocosolver), [ClaferChocoIG](https://github.com/gsdlab/ClaferChocoIG)).
 * Web Frontends
   * Clafer Integrated Development Environment ([ClaferIDE](https://github.com/gsdlab/claferIDE)),
   * Clafer Configurator ([ClaferConfigurator](https://github.com/gsdlab/ClaferConfigurator)),
   * Multi-Objective [Visualizer and Explorer](https://github.com/gsdlab/ClaferMooVisualizer), and
   * Clafer Wiki ([ClaferWiki](https://github.com/gsdlab/claferwiki)).
 
-Contributors
-------------
+## Contributors
 
+* [Michał Antkiewicz](http://gsd.uwaterloo.ca/mantkiew), Main developer.
 * [Kacper Bak](http://gsd.uwaterloo.ca/kbak), Original developer.
-* [Jimmy Liang](http://gsd.uwaterloo.ca/jliang), Main developer.
-* [Michał Antkiewicz](http://gsd.uwaterloo.ca/mantkiew), Requirements, development, architecture, testing, technology transfer.
+* [Jimmy Liang](http://gsd.uwaterloo.ca/jliang), Developer.
 * [Ed Zulkoski](http://gsd.uwaterloo.ca/ezulkosk), Python IR Generator.
 * Luke Michael Brown, co-op student May-Aug 2013. Many improvements.
 * Paulius Juodisius, [customized BNFC generator](https://github.com/juodaspaulius/bnfc) and layout resolver.
 * [Rafael Olaechea](http://gsd.uwaterloo.ca/rolaechea), Multi-Objective Optimization extensions.
 
-Getting the Clafer Compiler
----------------------------
+## Getting the Clafer Compiler
 
 Clafer can be installed from a binary distribution (preferred), from Hackage, and from the source code.
 
@@ -60,16 +55,16 @@ 
 Optional:
 
-* [Java Platform (JDK)](http://www.oracle.com/technetwork/java/javase/downloads/index.html) v8+, 32bit
-  * needed only for running XML output validation
-* [Alloy4.1 and/or Alloy4.2](http://alloy.mit.edu/alloy/download.html)
+* [Java Platform (JDK)](http://www.oracle.com/technetwork/java/javase/downloads/index.html) v8+, 32bit on Windows, 64bit otherwise
+  * needed only for running Alloy validation
+* [Alloy4.2](http://alloy.mit.edu/alloy/download.html)
   * needed only for Alloy output validation
 * [GraphViz](http://graphviz.org/)
   * the program `dot` is needed only in the `html` mode for SVG graph generation
 
 ### Installation from binaries
 
-Binary distributions of the release 0.3.10 of Clafer Tools for Windows, Mac, and Linux,
+Binary distributions of the release 0.4.0 of Clafer Tools for Windows, Mac, and Linux,
 can be downloaded from
 [Clafer Tools - Binary Distributions](http://gsd.uwaterloo.ca/clafer-tools-binary-distributions).
 
@@ -80,24 +75,24 @@ 
 Dependencies
 
-* [The Haskell Platform](http://hackage.haskell.org/platform/) v2014.2.0.0
-  * Alternatively GHC >= 7.8.3 and Cabal >= 1.18
+* [GHC](https://www.haskell.org/downloads) v7.10.*
 
-Clafer is now available on [Hackage](http://hackage.haskell.org/package/clafer-0.3.10/) and it can be installed using
+Clafer is now available on [Hackage](http://hackage.haskell.org/package/clafer-0.4.0/) and it can be installed using
 
 1. `cabal update`
 2. `cabal install clafer`
-3. `cd <cabal's lib or share folder>`  (`C:\Users\<user>\AppData\Roaming\cabal\x86_64-windows-ghc-7.8.3\clafer-0.3.10` on Windows or `.cabal/share/x86_64-linux-ghc-7.8.3/clafer-0.3.10/` on Linux)
-4. to automatically download Alloy jars
-  * execute `make` in `tools`
+3. on Windows `cd C:\Users\<user>\AppData\Roaming\cabal\i386-windows-ghc-7.10.1\clafer-0.4.0`
+4. on Linux `ca ~/.cabal/share/x86_64-linux-ghc-7.10.1/clafer-0.4.0/`
+5. to automatically download Alloy jars, execute
+  * `cd tools`
+  * `make`
 
 ### Installation from the source code
 
 Dependencies
 
-* [The Haskell Platform](http://hackage.haskell.org/platform/) v2014.2.0.0
-  * Alternatively GHC >= 7.8.3 and Cabal >= 1.18
-* [Alloy4.1 and/or Alloy4.2](http://alloy.mit.edu/alloy/download.html)
+* [GHC](https://www.haskell.org/downloads) v7.10.*
+* [Alloy4.2](http://alloy.mit.edu/alloy/download.html)
   * downloaded automatically during the build
 * [Git](http://git-scm.com/)
 
@@ -136,35 +131,30 @@ #### Note:
 > On Windows, use `/` with the `make` command instead of `\`.
 
-Integration with Sublime Text 2/3
----------------------------------
+## Integration with Sublime Text 2/3
 
 See [ClaferToolsST](https://github.com/gsdlab/ClaferToolsST)
 
-Integration with VIM
---------------------
+## Integration with VIM
 
 See [clafer-vim](https://github.com/wasowski/clafer-vim)
 
 Usage
 =====
 
-Clafer Compiler
----------------
+## Clafer Compiler
 
 (As printed by `clafer --help`)
 
 ```
-Clafer 0.3.10
+Clafer 0.4.0
 
 clafer [OPTIONS] [FILE]
 
 Common flags:
   -m --mode=CLAFERMODE                    Generated output type. Available
-                                          CLAFERMODEs are: 'alloy' (Alloy 4.1);
-                                          'alloy42' (default, Alloy 4.2); 'xml'
-                                          (intermediate representation of
-                                          Clafer model); 'json' (intermediate
+                                          CLAFERMODEs are: 'alloy' (default,
+                                          Alloy 4.2); 'json' (intermediate
                                           representation of Clafer model);
                                           'clafer' (analyzed and desugared
                                           clafer model); 'html' (original model
@@ -178,38 +168,28 @@                                           can be specified at the same time,
                                           e.g., '-m alloy -m html'.
   -o --console-output                     Output code on console.
-  -i --flatten-inheritance                Flatten inheritance ('alloy' and
-                                          'alloy42' modes only).
+  -i --flatten-inheritance                Flatten inheritance ('alloy' mode
+                                          only).
      --timeout-analysis=INT               Timeout for analysis.
   -l --no-layout                          Don't resolve off-side rule layout.
-     --nl --new-layout                    Use new fast layout resolver
+  -n --nl --new-layout                    Use new fast layout resolver
                                           (experimental).
   -c --check-duplicates                   Check duplicated clafer names in
                                           the entire model.
   -f --skip-resolver                      Skip name resolution.
   -k --keep-unused                        Keep uninstantated abstract clafers
-                                          ('alloy' and 'alloy42' modes only).
+                                          ('alloy' mode only).
   -s --no-stats                           Don't print statistics.
-     --schema                             Show Clafer IR (intermediate
-                                          representation) XML schema.
   -v --validate                           Validate outputs of all modes. Uses
-                                          'tools/XsdCheck.class' for XML,
-                                          'tools/alloy4.jar' and
                                           'tools/alloy4.2.jar' for Alloy
                                           models, and Clafer translator for
                                           desugared Clafer models. Use
                                           '--tooldir' to override the default
                                           location of these tools.
-     --nr --noalloyruncommand             For usage with partial instances:
-                                          Don't generate the alloy 'run show
-                                          for ... ' command, and rename @.ref
-                                          with unique names  ('alloy' and
-                                          'alloy42' modes only).
      --tooldir=DIR                        Specify the tools directory
                                           ('validate' only). Default: 'tools/'.
   -a --alloy-mapping                      Generate mapping to Alloy source
-                                          code ('alloy' and 'alloy42' modes
-                                          only).
+                                          code ('alloy' mode only).
      --self-contained                     Generate a self-contained html
                                           document ('html' mode only).
      --add-graph                          Add a graph to the generated html
@@ -228,15 +208,11 @@                                           none or simple (default).
      --check-afm --afm                    Throws an error if the cardinality
                                           of any of the clafers is above 1.
-     --sg --skip-goals                    Skip generation of Alloy code for
-                                          goals. Useful for all tools working
-                                          with standard Alloy.
      --meta-data                          Generate a 'fully qualified
                                           name'-'least-partially-qualified
                                           name'-'unique ID' map ('.cfr-map').
-                                          In Alloy, Alloy42, and Choco modes,
-                                          generate the scopes map
-                                          ('.cfr-scope').
+                                          In Alloy and Choco modes, generate
+                                          the scopes map ('.cfr-scope').
   -? --help                               Display help message
   -V --version                            Print version information
      --numeric-version                    Print just the version number
@@ -246,9 +222,9 @@ 
 Multiple modes can be used at the same time. For example,
 
-`clafer model.cfr -m alloy -m xml -m html -m graph --self-contained --show-references --no-stats`
+`clafer model.cfr -m alloy -m json -m html -m graph --self-contained --show-references --no-stats`
 
-The mode `-m alloy42` is only the default mode if no other modes are given. When other modes are given, the mode `-m alloy42` must be added explicitly if needed.
+The mode `-m alloy` is only the default mode if no other modes are given. When other modes are given, the mode `-m alloy` must be added explicitly if needed.
 
 Additionally, `[OPTIONS]` can also be specified directly in the model file by inserting the following compiler directive as the first line of the file:
 
@@ -278,9 +254,69 @@ * `//# GRAPH` - marks the insertion point for a graph rendering. The graph is only produced in HTML mode with the argument `--add-graph`.
 * `//# STATS` - marks the insertion point for module statistics. The statistics can be omitted using the argument `--no-stats`.
 * `//# SUMMARY` - shorthand for `//# GRAPH` and `//# STATS`
-* `//# QUALITY_ATTRIBUTE` - is used by ClaferMooVisualizer and ClaferConfigurator to distinguish quality attributes, which should be filtered out, from other clafers.
 
-Need help?
-==========
+He is some information about the development of the clafer compiler.
+
+## Branching
+
+We are following the simplified version of the [successful Git branching model](http://nvie.com/posts/a-successful-git-branching-model/).
+The branch `master` is for releases and hot fixes only.
+The branch `develop` is for minor development and for integration of features from feature branches.
+For any substantial work, branch off from `develop` and create a pull request back into `develop` after the work is completed.
+We do testing and code review before merging into develop.
+If the `develop` is ahead, merge it into the feature branch and perform integration testing there.
+To make a release, we create a pull request from `develop` into `master`.
+We tag `master` with version numbers after each release merge.
+
+## Testing
+
+We have both automated tests and regression tests.
+
+To run the automated tests (including both unit tests and [doctests](https://github.com/sol/doctest#readme)), execute
+
+```
+cabal test
+```
+
+
+To only run unit tests, execute `cabal test test-suite`.
+
+To only run doctests, execute `cabal test doctests`.
+
+For instructions for adding new modules to the doctest suite, see [cabal integration](https://github.com/sol/doctest#cabal-integration).
+
+To run all the automated tests and the regression tests, execute
+
+```
+make test
+```
+
+We do test-driven development in the following way:
+
+1. create a test case Clafer model in either `test/positive` or `test/negative` depending on whether a test case should compile successfully or return an error. For example, see a positive test case [test/positive/redefinition.cfr](https://github.com/gsdlab/clafer/blob/namedDrefs/test/positive/redefinition.cfr).
+2. produce the intended compiler output automatically if possible and manually fix the output. Save the intended output as a regression test case. For example, see [test/regression/redefinition.cfr.reg](https://github.com/gsdlab/clafer/blob/namedDrefs/test/regression/redefinition.als.reg).
+3. implement the feature to reproduce the intended output: compiler the test case and execute
+
+```
+cd test
+make diffRegressions
+```
+
+this will show you how the current output diverges from the intended output.
+
+
+## Modifying the grammar
+
+We are using a [customized version of BNCF](https://github.com/juodaspaulius/bnfc).
+Clone the repository and install a binary of `bnfc` so that it's visible in your `PATH`.
+After changing the grammar, execute
+
+```
+make grammar
+```
+
+
+# Need help?
+
 * Visit [language's website](http://clafer.org).
 * Report issues to [issue tracker](https://github.com/gsdlab/clafer/issues)
clafer.cabal view
@@ -1,7 +1,7 @@ Name:                   clafer
-Version:                0.3.10
-Synopsis:               clafer compiles Clafer models to other formats, such as Alloy, XML, HTML, Dot.
-Description:            Clafer is a general purpose, lightweight, structural modeling language developed at GSD Lab, University of Waterloo, and MODELS group at IT University of Copenhagen. Lightweight modeling aims at improving the understanding of the problem domain in the early stages of software development and determining the requirements with fewer defects. Clafer's goal is to make modeling more accessible to a wider range of users and domains. The tool provides a reference language implementation. It translates models to other formats (e.g. Alloy, XML) to allow for reasoning with existing tools.
+Version:                0.4.0
+Synopsis:               Compiles Clafer models to other formats: Alloy, JavaScript, JSON, HTML, Dot.
+Description:            Clafer is a general purpose, lightweight, structural modeling language developed at GSD Lab, University of Waterloo, and MODELS group at IT University of Copenhagen. Lightweight modeling aims at improving the understanding of the problem domain in the early stages of software development and determining the requirements with fewer defects. Clafer's goal is to make modeling more accessible to a wider range of users and domains. The tool provides a reference language implementation. It translates models to other formats (e.g. Alloy, JavaScript, JSON) to allow for reasoning with existing tools.
 Homepage:               http://clafer.org
 License:                MIT
 License-file:           LICENSE
@@ -15,70 +15,58 @@                         , CHANGES.md
                         , logo.pdf
                         , Makefile
-                        , tools/XsdCheck.java
-                        , tools/XsdCheck.class
                         , tools/ecore2clafer.jar
                         , tools/Makefile
 source-repository head
     type:               git
     location:           git://github.com/gsdlab/clafer.git
 Executable clafer
-    build-tools:        ghc >= 7.8.3
+    build-tools:        ghc >= 7.10.1
     default-language:   Haskell2010
     main-is:            clafer.hs
     hs-source-dirs:     src-cmd
-    build-depends:      base >= 4.7.0.1 && < 5
-                      , containers >= 0.5.5.1
-                      , filepath >= 1.3.0.2
-                      , process >= 1.1.0.2
+    build-depends:      base >= 4.8.0.0 && < 5
+                      , containers >= 0.5.6.2
+                      , filepath >= 1.4.0.0
+                      , process >= 1.2.3.0
 
                       , mtl >= 2.2.1
 
-                      , cmdargs >= 0.10.7
+                      , cmdargs >= 0.10.13
                       , split >= 0.2.2
 
-                      , clafer == 0.3.10
-    if os(windows)
-        build-depends:  HaXml == 1.24
-    else
-        build-depends:  HaXml >= 1.24
-
+                      , clafer == 0.4.0
     other-modules:      Paths_clafer
 
 library
-    build-tools:        ghc >= 7.8.3
+    build-tools:        ghc >= 7.10.1
     default-language:   Haskell2010
-    build-depends:      array >= 0.4.0.1
-                      , base >= 4.7.0.1 && < 5
-                      , bytestring >= 0.10.4.0
-                      , containers >= 0.5.5.1
-                      , directory >= 1.2.1.0
-                      , filepath >= 1.3.0.2
-                      , process >= 1.1.0.2
-                      , transformers >= 0.3.0.0
+    build-depends:      array >= 0.5.1.0
+                      , base >= 4.8.0.0 && < 5
+                      , bytestring >= 0.10.6.0
+                      , containers >= 0.5.6.2
+                      , directory >= 1.2.2.0
+                      , filepath >= 1.4.0.0
+                      , process >= 1.2.3.0
+                      , transformers >= 0.4.2.0
 
-                      , HTTP >= 4000.2.10
+                      , HTTP >= 4000.2.20
                       , mtl >= 2.2.1
-                      , network >= 2.6
-                      , parsec >= 3.1.3
-                      , text >= 1.1.0.0
+                      , network >= 2.6.2.1
+                      , parsec >= 3.1.9
+                      , text >= 1.2.1.1
 
-                      , aeson >= 0.7.0.6
-                      , cmdargs >= 0.10.7
+                      , aeson >= 0.8.0.2
+                      , cmdargs >= 0.10.13
                       , data-stringmap >= 1.0.1.1
                       , executable-path >= 0.0.3
                       , json-builder >= 0.3
-                      , lens >= 4.7
-                      , lens-aeson >= 1.0.0.3
-                      , network-uri >= 2.6
-                      , string-conversions >= 0.3.0.2
+                      , lens >= 4.11.1
+                      , lens-aeson >= 1.0.0.4
+                      , network-uri >= 2.6.0.3
+                      , string-conversions >= 0.4
                       , split >= 0.2.2
 
-    if os(windows)
-        build-depends:  HaXml == 1.24
-    else
-        build-depends:  HaXml >= 1.24
-
     hs-source-dirs:     src
     ghc-options:        -Wall -fno-warn-orphans
     exposed-modules:    Language.Clafer
@@ -101,9 +89,7 @@                       , Language.Clafer.Generator.Graph
                       , Language.Clafer.Generator.Html
                       , Language.Clafer.Generator.Python
-                      , Language.Clafer.Generator.Schema
                       , Language.Clafer.Generator.Stats
-                      , Language.Clafer.Generator.Xml
                       , Language.Clafer.Intermediate.Desugarer
                       , Language.Clafer.Intermediate.Intclafer
                       , Language.Clafer.Intermediate.Resolver
@@ -115,45 +101,51 @@                       , Language.Clafer.Intermediate.StringAnalyzer
                       , Language.Clafer.Intermediate.Tracing
                       , Language.Clafer.Intermediate.Transformer
+                      , Language.Clafer.Intermediate.TypeSystem
                       , Language.Clafer.Optimizer.Optimizer
                       , Language.Clafer.SplitJoin
-    other-modules:      Paths_clafer
-                      , GetURL
+                      , Paths_clafer
+    other-modules:      GetURL
 
 Test-Suite test-suite
-    build-tools:        ghc >= 7.8.3
+    build-tools:        ghc >= 7.10.1
     default-language:   Haskell2010
     type:               exitcode-stdio-1.0
     main-is:            test-suite.hs
     hs-source-dirs:     test
-    build-depends:      base >= 4.7.0.1 && < 5
-                      , containers >= 0.5.5.1
-                      , directory >= 1.2.1.0
-                      , filepath >= 1.3.0.2
+    build-depends:      base >= 4.8.0.0 && < 5
+                      , containers >= 0.5.6.2
+                      , directory >= 1.2.2.0
+                      , filepath >= 1.4.0.0
 
                       , HUnit >= 1.2.5.2
                       , mtl >= 2.2.1
-                      , QuickCheck >= 2.6
+                      , QuickCheck >= 2.8.1
 
                       , data-stringmap >= 1.0.1.1
-                      , lens >= 4.7
-                      , lens-aeson >= 1.0.0.3
-                      , tasty >= 0.10
-                      , tasty-hunit >= 0.9
-                      , tasty-th >= 0.1.2
-
-                      , clafer == 0.3.10
+                      , lens >= 4.11.1
+                      , lens-aeson >= 1.0.0.4
+                      , tasty >= 0.10.1.2
+                      , tasty-hunit >= 0.9.2
+                      , tasty-th >= 0.1.3
 
-    if os(windows)
-        build-depends:  HaXml == 1.24
-    else
-        build-depends:  HaXml >= 1.24
+                      , clafer == 0.4.0
 
     ghc-options:        -Wall
 
-    other-modules:      Paths_clafer
-                      , Functions
+    other-modules:      Functions
                       , Suite.Positive
                       , Suite.Negative
                       , Suite.SimpleScopeAnalyser
                       , Suite.Redefinition
+                      , Suite.TypeSystem
+
+Test-suite doctests
+    build-tools:        ghc >= 7.10.1
+    default-language:   Haskell2010
+    type:               exitcode-stdio-1.0
+    ghc-options:        -threaded -Wall
+    main-is:            doctests.hs
+    hs-source-dirs:     test
+    build-depends:      base
+                      , doctest >= 0.10.1
dist/build/Language/Clafer/Front/LexClafer.hs view
@@ -29,19 +29,19 @@ import GlaExts
 #endif
 alex_base :: AlexAddr
-alex_base = AlexA# "\xf8\xff\xff\xff\x4c\x00\x00\x00\xcc\x00\x00\x00\x4c\x01\x00\x00\x4c\x02\x00\x00\x0c\x02\x00\x00\x00\x00\x00\x00\x7d\x02\x00\x00\x7d\x03\x00\x00\x34\x00\x00\x00\x3d\x03\x00\x00\x13\x04\x00\x00\x00\x00\x00\x00\x7f\x03\x00\x00\x93\x04\x00\x00\x08\x05\x00\x00\xd9\xff\xff\xff\x4d\x00\x00\x00\x61\x00\x00\x00\xe1\xff\xff\xff\x08\x06\x00\x00\xc8\x05\x00\x00\x00\x00\x00\x00\xbe\x06\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\xed\xff\xff\xff\xdd\xff\xff\xff\x4f\x00\x00\x00\xd6\xff\xff\xff\xd7\xff\xff\xff\x00\x00\x00\x00\x9a\xff\xff\xff\xfa\xff\xff\xff\x3d\x00\x00\x00\xf1\xff\xff\xff\x2d\x00\x00\x00\x79\x00\x00\x00\x99\x06\x00\x00\x8c\x00\x00\x00\x00\x00\x00\x00\x97\x07\x00\x00"#
+alex_base = AlexA# "\xf8\xff\xff\xff\x4c\x00\x00\x00\xcc\x00\x00\x00\x4c\x01\x00\x00\x4c\x02\x00\x00\x0c\x02\x00\x00\x00\x00\x00\x00\x7d\x02\x00\x00\x7d\x03\x00\x00\x34\x00\x00\x00\x3d\x03\x00\x00\x13\x04\x00\x00\x00\x00\x00\x00\x7f\x03\x00\x00\x93\x04\x00\x00\x08\x05\x00\x00\xd6\xff\xff\xff\x4d\x00\x00\x00\x61\x00\x00\x00\xea\xff\xff\xff\x08\x06\x00\x00\xc8\x05\x00\x00\x00\x00\x00\x00\xbe\x06\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\xe7\xff\xff\xff\xe8\xff\xff\xff\x4f\x00\x00\x00\xd5\xff\xff\xff\xd7\xff\xff\xff\x00\x00\x00\x00\x9b\xff\xff\xff\xde\xff\xff\xff\x52\x00\x00\x00\xf1\xff\xff\xff\x0e\x00\x00\x00\x79\x00\x00\x00\x8c\x00\x00\x00\x99\x06\x00\x00\x00\x00\x00\x00\x97\x07\x00\x00"#
 
 alex_table :: AlexAddr
-alex_table = AlexA# "\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x12\x00\x1f\x00\x1f\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x0b\x00\x19\x00\x1d\x00\x0f\x00\x1f\x00\x17\x00\x1f\x00\x13\x00\x1f\x00\x1f\x00\x1f\x00\x24\x00\x1b\x00\x1f\x00\x1c\x00\x23\x00\x1a\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x1e\x00\x1f\x00\x22\x00\x21\x00\x1e\x00\x1f\x00\x1f\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x1f\x00\x1f\x00\x1f\x00\x0f\x00\x1f\x00\x1f\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x1f\x00\x20\x00\x1f\x00\x01\x00\x1f\x00\x00\x00\x1f\x00\x21\x00\x18\x00\x1f\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x00\x00\x21\x00\x00\x00\x00\x00\x0f\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x0f\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x04\x00\x05\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x02\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\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\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\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\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\x0d\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\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\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\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\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\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\x01\x00\x15\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x04\x00\x05\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x28\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x08\x00\x0a\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\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\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\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\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\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x14\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x15\x00\x02\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\x03\x00\x06\x00\x06\x00\x06\x00\x07\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+alex_table = AlexA# "\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x1f\x00\x0b\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x17\x00\x1f\x00\x19\x00\x1d\x00\x0f\x00\x1f\x00\x1f\x00\x1f\x00\x13\x00\x1f\x00\x1f\x00\x1f\x00\x24\x00\x1b\x00\x1f\x00\x1c\x00\x23\x00\x1a\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x1e\x00\x1f\x00\x22\x00\x21\x00\x1e\x00\x1f\x00\x1f\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x1f\x00\x1f\x00\x1f\x00\x0f\x00\x00\x00\x1f\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x1f\x00\x20\x00\x1f\x00\x01\x00\x00\x00\x00\x00\x00\x00\x12\x00\x18\x00\x1f\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x1f\x00\x21\x00\x1f\x00\x21\x00\x0f\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x0f\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x04\x00\x05\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x02\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\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\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\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\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\x0d\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\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\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\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\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\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\x01\x00\x15\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x04\x00\x05\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x28\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x08\x00\x0a\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\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\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\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\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\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x14\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x15\x00\x02\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\x03\x00\x06\x00\x06\x00\x06\x00\x07\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
 
 alex_check :: AlexAddr
-alex_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x2d\x00\x26\x00\x2b\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3d\x00\x3d\x00\x3e\x00\x7c\x00\x2a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x2f\x00\x25\x00\x26\x00\x2e\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\x3e\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\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\x22\x00\x2a\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x2a\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x2f\x00\x2d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x3e\x00\xff\xff\xff\xff\x5c\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x74\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\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\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\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\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\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\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\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\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\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\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x2a\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x22\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\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\x5c\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\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\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\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\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\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\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\x65\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\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\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\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\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\xc3\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+alex_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x26\x00\x2a\x00\x3d\x00\x2b\x00\x3d\x00\x3e\x00\x2f\x00\x7c\x00\x20\x00\x21\x00\x22\x00\x23\x00\x3e\x00\x25\x00\x26\x00\x2e\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\x2a\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\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\x22\x00\xff\xff\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x2f\x00\x2d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x3a\x00\x3e\x00\x3c\x00\x3d\x00\x5c\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x74\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\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\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\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\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\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\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\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\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\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\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x2a\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x22\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\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\x5c\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\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\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\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\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\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\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\x65\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\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\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\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\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\xc3\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
 
 alex_deflt :: AlexAddr
 alex_deflt = AlexA# "\xff\xff\x0b\x00\xff\xff\xff\xff\x0b\x00\x0b\x00\x0c\x00\x0c\x00\x0f\x00\xff\xff\x0f\x00\x0b\x00\x16\x00\x16\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x17\x00\x17\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"#
 
-alex_accept = listArray (0::Int,41) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAccSkip,AlexAccSkip,AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_4),AlexAcc (alex_action_5),AlexAcc (alex_action_5),AlexAcc (alex_action_6),AlexAcc (alex_action_7)]
-{-# LINE 42 "src\Language\Clafer\Front\LexClafer.x" #-}
+alex_accept = listArray (0::Int,41) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAccSkip,AlexAccSkip,AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_4),AlexAcc (alex_action_5),AlexAcc (alex_action_6),AlexAcc (alex_action_7),AlexAcc (alex_action_8)]
+{-# LINE 43 "src\Language\Clafer\Front\LexClafer.x" #-}
 
 
 tok :: (Posn -> String -> Token) -> (Posn -> String -> Token)
@@ -59,6 +59,7 @@  | TC !String         -- character literals
  | T_PosInteger !String
  | T_PosDouble !String
+ | T_PosReal !String
  | T_PosString !String
  | T_PosIdent !String
 
@@ -97,6 +98,7 @@   PT _ (TC s)   -> s
   PT _ (T_PosInteger s) -> s
   PT _ (T_PosDouble s) -> s
+  PT _ (T_PosReal s) -> s
   PT _ (T_PosString s) -> s
   PT _ (T_PosIdent s) -> s
 
@@ -197,13 +199,34 @@ alex_action_3 =  tok (\p s -> PT p (eitherResIdent (TV . share) s)) 
 alex_action_4 =  tok (\p s -> PT p (eitherResIdent (T_PosInteger . share) s)) 
 alex_action_5 =  tok (\p s -> PT p (eitherResIdent (T_PosDouble . share) s)) 
-alex_action_6 =  tok (\p s -> PT p (eitherResIdent (T_PosString . share) s)) 
-alex_action_7 =  tok (\p s -> PT p (eitherResIdent (T_PosIdent . share) s)) 
-alex_action_8 =  tok (\p s -> PT p (eitherResIdent (TV . share) s)) 
+alex_action_6 =  tok (\p s -> PT p (eitherResIdent (T_PosReal . share) s)) 
+alex_action_7 =  tok (\p s -> PT p (eitherResIdent (T_PosString . share) s)) 
+alex_action_8 =  tok (\p s -> PT p (eitherResIdent (T_PosIdent . share) s)) 
+alex_action_9 =  tok (\p s -> PT p (eitherResIdent (TV . share) s)) 
 {-# LINE 1 "templates\GenericTemplate.hs" #-}
 {-# LINE 1 "templates\\GenericTemplate.hs" #-}
 {-# LINE 1 "<built-in>" #-}
 {-# LINE 1 "<command-line>" #-}
+{-# LINE 8 "<command-line>" #-}
+{-# LINE 1 "C:\\dev\\MinGHC-7.10.1\\ghc-7.10.1\\lib/include\\ghcversion.h" #-}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{-# LINE 8 "<command-line>" #-}
 {-# LINE 1 "templates\\GenericTemplate.hs" #-}
 -- -----------------------------------------------------------------------------
 -- ALEX TEMPLATE
dist/build/Language/Clafer/Front/ParClafer.hs view
@@ -30,1750 +30,1769 @@ happyOut9 :: (HappyAbsSyn ) -> (PosDouble)
 happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x
 {-# INLINE happyOut9 #-}
-happyIn10 :: (PosString) -> (HappyAbsSyn )
-happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn10 #-}
-happyOut10 :: (HappyAbsSyn ) -> (PosString)
-happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut10 #-}
-happyIn11 :: (PosIdent) -> (HappyAbsSyn )
-happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn11 #-}
-happyOut11 :: (HappyAbsSyn ) -> (PosIdent)
-happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut11 #-}
-happyIn12 :: (Module) -> (HappyAbsSyn )
-happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn12 #-}
-happyOut12 :: (HappyAbsSyn ) -> (Module)
-happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut12 #-}
-happyIn13 :: (Declaration) -> (HappyAbsSyn )
-happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn13 #-}
-happyOut13 :: (HappyAbsSyn ) -> (Declaration)
-happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut13 #-}
-happyIn14 :: (Clafer) -> (HappyAbsSyn )
-happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn14 #-}
-happyOut14 :: (HappyAbsSyn ) -> (Clafer)
-happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut14 #-}
-happyIn15 :: (Constraint) -> (HappyAbsSyn )
-happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn15 #-}
-happyOut15 :: (HappyAbsSyn ) -> (Constraint)
-happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut15 #-}
-happyIn16 :: (SoftConstraint) -> (HappyAbsSyn )
-happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn16 #-}
-happyOut16 :: (HappyAbsSyn ) -> (SoftConstraint)
-happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut16 #-}
-happyIn17 :: (Goal) -> (HappyAbsSyn )
-happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn17 #-}
-happyOut17 :: (HappyAbsSyn ) -> (Goal)
-happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut17 #-}
-happyIn18 :: (Abstract) -> (HappyAbsSyn )
-happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn18 #-}
-happyOut18 :: (HappyAbsSyn ) -> (Abstract)
-happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut18 #-}
-happyIn19 :: (Elements) -> (HappyAbsSyn )
-happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn19 #-}
-happyOut19 :: (HappyAbsSyn ) -> (Elements)
-happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut19 #-}
-happyIn20 :: (Element) -> (HappyAbsSyn )
-happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn20 #-}
-happyOut20 :: (HappyAbsSyn ) -> (Element)
-happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut20 #-}
-happyIn21 :: (Super) -> (HappyAbsSyn )
-happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn21 #-}
-happyOut21 :: (HappyAbsSyn ) -> (Super)
-happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut21 #-}
-happyIn22 :: (Reference) -> (HappyAbsSyn )
-happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn22 #-}
-happyOut22 :: (HappyAbsSyn ) -> (Reference)
-happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut22 #-}
-happyIn23 :: (Init) -> (HappyAbsSyn )
-happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn23 #-}
-happyOut23 :: (HappyAbsSyn ) -> (Init)
-happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut23 #-}
-happyIn24 :: (InitHow) -> (HappyAbsSyn )
-happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn24 #-}
-happyOut24 :: (HappyAbsSyn ) -> (InitHow)
-happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut24 #-}
-happyIn25 :: (GCard) -> (HappyAbsSyn )
-happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn25 #-}
-happyOut25 :: (HappyAbsSyn ) -> (GCard)
-happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut25 #-}
-happyIn26 :: (Card) -> (HappyAbsSyn )
-happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn26 #-}
-happyOut26 :: (HappyAbsSyn ) -> (Card)
-happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut26 #-}
-happyIn27 :: (NCard) -> (HappyAbsSyn )
-happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn27 #-}
-happyOut27 :: (HappyAbsSyn ) -> (NCard)
-happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut27 #-}
-happyIn28 :: (ExInteger) -> (HappyAbsSyn )
-happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn28 #-}
-happyOut28 :: (HappyAbsSyn ) -> (ExInteger)
-happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut28 #-}
-happyIn29 :: (Name) -> (HappyAbsSyn )
-happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn29 #-}
-happyOut29 :: (HappyAbsSyn ) -> (Name)
-happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut29 #-}
-happyIn30 :: (Exp) -> (HappyAbsSyn )
-happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn30 #-}
-happyOut30 :: (HappyAbsSyn ) -> (Exp)
-happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut30 #-}
-happyIn31 :: (Exp) -> (HappyAbsSyn )
-happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn31 #-}
-happyOut31 :: (HappyAbsSyn ) -> (Exp)
-happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut31 #-}
-happyIn32 :: (Exp) -> (HappyAbsSyn )
-happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn32 #-}
-happyOut32 :: (HappyAbsSyn ) -> (Exp)
-happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut32 #-}
-happyIn33 :: (Exp) -> (HappyAbsSyn )
-happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn33 #-}
-happyOut33 :: (HappyAbsSyn ) -> (Exp)
-happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut33 #-}
-happyIn34 :: (Exp) -> (HappyAbsSyn )
-happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn34 #-}
-happyOut34 :: (HappyAbsSyn ) -> (Exp)
-happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut34 #-}
-happyIn35 :: (Exp) -> (HappyAbsSyn )
-happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn35 #-}
-happyOut35 :: (HappyAbsSyn ) -> (Exp)
-happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut35 #-}
-happyIn36 :: (Exp) -> (HappyAbsSyn )
-happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn36 #-}
-happyOut36 :: (HappyAbsSyn ) -> (Exp)
-happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut36 #-}
-happyIn37 :: (Exp) -> (HappyAbsSyn )
-happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn37 #-}
-happyOut37 :: (HappyAbsSyn ) -> (Exp)
-happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut37 #-}
-happyIn38 :: (Exp) -> (HappyAbsSyn )
-happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn38 #-}
-happyOut38 :: (HappyAbsSyn ) -> (Exp)
-happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut38 #-}
-happyIn39 :: (Exp) -> (HappyAbsSyn )
-happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn39 #-}
-happyOut39 :: (HappyAbsSyn ) -> (Exp)
-happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut39 #-}
-happyIn40 :: (Exp) -> (HappyAbsSyn )
-happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn40 #-}
-happyOut40 :: (HappyAbsSyn ) -> (Exp)
-happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut40 #-}
-happyIn41 :: (Exp) -> (HappyAbsSyn )
-happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn41 #-}
-happyOut41 :: (HappyAbsSyn ) -> (Exp)
-happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut41 #-}
-happyIn42 :: (Exp) -> (HappyAbsSyn )
-happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn42 #-}
-happyOut42 :: (HappyAbsSyn ) -> (Exp)
-happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut42 #-}
-happyIn43 :: (Exp) -> (HappyAbsSyn )
-happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn43 #-}
-happyOut43 :: (HappyAbsSyn ) -> (Exp)
-happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut43 #-}
-happyIn44 :: (SetExp) -> (HappyAbsSyn )
-happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn44 #-}
-happyOut44 :: (HappyAbsSyn ) -> (SetExp)
-happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut44 #-}
-happyIn45 :: (SetExp) -> (HappyAbsSyn )
-happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn45 #-}
-happyOut45 :: (HappyAbsSyn ) -> (SetExp)
-happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut45 #-}
-happyIn46 :: (SetExp) -> (HappyAbsSyn )
-happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn46 #-}
-happyOut46 :: (HappyAbsSyn ) -> (SetExp)
-happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut46 #-}
-happyIn47 :: (SetExp) -> (HappyAbsSyn )
-happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn47 #-}
-happyOut47 :: (HappyAbsSyn ) -> (SetExp)
-happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut47 #-}
-happyIn48 :: (SetExp) -> (HappyAbsSyn )
-happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn48 #-}
-happyOut48 :: (HappyAbsSyn ) -> (SetExp)
-happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut48 #-}
-happyIn49 :: (SetExp) -> (HappyAbsSyn )
-happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn49 #-}
-happyOut49 :: (HappyAbsSyn ) -> (SetExp)
-happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut49 #-}
-happyIn50 :: (SetExp) -> (HappyAbsSyn )
-happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn50 #-}
-happyOut50 :: (HappyAbsSyn ) -> (SetExp)
-happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut50 #-}
-happyIn51 :: (Decl) -> (HappyAbsSyn )
-happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn51 #-}
-happyOut51 :: (HappyAbsSyn ) -> (Decl)
-happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut51 #-}
-happyIn52 :: (Quant) -> (HappyAbsSyn )
-happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn52 #-}
-happyOut52 :: (HappyAbsSyn ) -> (Quant)
-happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut52 #-}
-happyIn53 :: (EnumId) -> (HappyAbsSyn )
-happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn53 #-}
-happyOut53 :: (HappyAbsSyn ) -> (EnumId)
-happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut53 #-}
-happyIn54 :: (ModId) -> (HappyAbsSyn )
-happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn54 #-}
-happyOut54 :: (HappyAbsSyn ) -> (ModId)
-happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut54 #-}
-happyIn55 :: (LocId) -> (HappyAbsSyn )
-happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn55 #-}
-happyOut55 :: (HappyAbsSyn ) -> (LocId)
-happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut55 #-}
-happyIn56 :: ([Declaration]) -> (HappyAbsSyn )
-happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn56 #-}
-happyOut56 :: (HappyAbsSyn ) -> ([Declaration])
-happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut56 #-}
-happyIn57 :: ([EnumId]) -> (HappyAbsSyn )
-happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn57 #-}
-happyOut57 :: (HappyAbsSyn ) -> ([EnumId])
-happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut57 #-}
-happyIn58 :: ([Element]) -> (HappyAbsSyn )
-happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn58 #-}
-happyOut58 :: (HappyAbsSyn ) -> ([Element])
-happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut58 #-}
-happyIn59 :: ([Exp]) -> (HappyAbsSyn )
-happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn59 #-}
-happyOut59 :: (HappyAbsSyn ) -> ([Exp])
-happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut59 #-}
-happyIn60 :: ([LocId]) -> (HappyAbsSyn )
-happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn60 #-}
-happyOut60 :: (HappyAbsSyn ) -> ([LocId])
-happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut60 #-}
-happyIn61 :: ([ModId]) -> (HappyAbsSyn )
-happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn61 #-}
-happyOut61 :: (HappyAbsSyn ) -> ([ModId])
-happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut61 #-}
-happyInTok :: (Token) -> (HappyAbsSyn )
-happyInTok x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyInTok #-}
-happyOutTok :: (HappyAbsSyn ) -> (Token)
-happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOutTok #-}
-
-
-happyActOffsets :: HappyAddr
-happyActOffsets = HappyA# "\x00\x00\x33\x01\x34\x01\x25\x01\x19\x01\x0b\x01\x00\x00\xf0\x00\x00\x00\xf0\x00\x0e\x01\xef\x00\x00\x00\xef\x00\x80\x01\x00\x00\xef\x00\x9d\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\x00\xee\x00\x1e\x01\xe7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x01\x0a\x01\xea\x00\xe9\x00\x1a\x01\x00\x00\xf0\x05\x00\x00\x50\x00\x07\x00\x00\x00\x00\x00\x00\x00\xa0\x00\x0f\x01\xfd\x00\xec\x00\xed\x00\xeb\x00\x00\x00\xbe\x00\xd7\x00\x00\x00\xad\x00\x27\x00\x75\x00\x27\x00\x00\x00\xd7\xff\x27\x00\x00\x00\x92\x00\x92\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xd9\x00\x0f\x00\xdd\x00\x1b\x00\xd8\x00\xac\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x00\x00\x7f\x00\xfd\xff\x00\x00\x00\x00\x00\x00\xc1\x00\x27\x00\xc1\x00\xa3\x00\x00\x00\xa5\x00\xc6\x00\xc7\x00\x95\x00\x00\x00\xd0\x00\x78\x00\x00\x00\xf0\x05\x94\x00\x18\x00\x00\x00\x93\x00\x8b\x00\xfd\xff\xfd\xff\xfd\xff\xfd\xff\xfd\xff\xfd\xff\xfd\xff\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xa2\x00\x92\x00\x92\x00\x92\x00\x92\x00\x92\x00\xb0\x00\x8e\x00\x8d\x00\xc3\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x07\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xfd\xff\xb5\x00\xb7\x00\xa4\x00\xa6\x00\x85\x00\x00\x00\x7d\x00\x75\x00\x00\x00\x00\x00\x00\x00\x77\x00\xfd\xff\x6d\x00\x75\x00\x27\x00\x64\x00\x1b\x00\xfd\xff\xfd\xff\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x6a\x01\x46\x00\x64\x00\x64\x00\xf3\xff\x51\x00\x00\x00\x00\x00\x64\x00\x75\x00\x00\x00\x75\x00\x78\x00\x00\x00\x00\x00\x00\x00\x31\x00\x3d\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
-
-happyGotoOffsets :: HappyAddr
-happyGotoOffsets = HappyA# "\x1c\x00\x0c\x00\x70\x00\x65\x00\x68\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\xf7\xff\x00\x00\xa1\x00\x00\x00\x00\x00\x82\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x35\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x02\xeb\xff\x3b\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x04\x00\x00\x00\x00\xb3\x03\xc1\x05\x0c\x02\xa7\x05\x00\x00\x2a\x01\x91\x05\x00\x00\xc8\x02\x99\x02\x00\x00\x00\x00\x00\x00\x77\x05\x00\x00\x61\x05\x00\x00\x00\x00\x00\x00\xdd\x01\x00\x00\x0b\x00\x05\x00\x00\x00\x15\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x00\x00\x00\x00\x00\x00\x03\x00\x45\x06\x00\x00\x00\x00\x00\x00\x00\x00\x47\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\xfb\x00\x31\x06\x90\x06\x88\x06\xcf\x00\x7a\x06\x71\x06\x5b\x06\x17\x05\x01\x05\xe7\x04\xd1\x04\xa2\x04\x73\x04\x5b\x04\x43\x04\x2b\x04\x13\x04\xfb\x03\xe3\x03\x00\x00\x84\x03\x55\x03\x26\x03\xf7\x02\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x19\x06\x52\x00\x7f\x01\x31\x05\x00\x00\x0a\x00\x03\x06\xed\x05\x00\x00\x00\x00\x00\x00\x00\x00\xdb\xff\xde\x01\x76\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x01\x00\x00\x21\x01\x00\x00\x00\x00\x00\x00\x00\x00\xd7\x05\xfb\xff\xf2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
-
-happyDefActions :: HappyAddr
-happyDefActions = HappyA# "\x84\xff\xef\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfa\xff\x00\x00\x7e\xff\x00\x00\x00\x00\x00\x00\x7e\xff\x00\x00\xdd\xff\xee\xff\x00\x00\xef\xff\x83\xff\xeb\xff\xe9\xff\xe7\xff\xe8\xff\xf4\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xff\xda\xff\xd9\xff\xdb\xff\xdc\xff\x00\x00\x7e\xff\x00\x00\xa1\xff\xa0\xff\x9f\xff\x86\xff\x8f\xff\x7d\xff\xc9\xff\xc5\xff\xc3\xff\xc1\xff\xbf\xff\xbd\xff\xbb\xff\xb2\xff\xb0\xff\xad\xff\xa9\xff\xa4\xff\xa2\xff\x9e\xff\x9a\xff\x98\xff\x96\xff\x94\xff\x92\xff\x90\xff\x00\x00\x7a\xff\xce\xff\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\x00\x00\x00\x00\x8a\xff\x00\x00\x00\x00\x8c\xff\x8b\xff\x89\xff\x00\x00\x88\xff\x00\x00\xf9\xff\xf8\xff\xf7\xff\x00\x00\xf2\xff\xe6\xff\x00\x00\x00\x00\xd7\xff\xd3\xff\xed\xff\xd2\xff\xd4\xff\xd5\xff\xd6\xff\x00\x00\xcf\xff\xd1\xff\xd0\xff\xe4\xff\x00\x00\xf1\xff\xa8\xff\xa7\xff\xc7\xff\x00\x00\xc8\xff\x00\x00\x85\xff\x00\x00\x7c\xff\x00\x00\x00\x00\xa5\xff\x00\x00\x9e\xff\xa6\xff\xbc\xff\x00\x00\x86\xff\xb1\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\xc6\xff\xc4\xff\xc2\xff\xc0\xff\xbe\xff\x00\x00\xb4\xff\xb6\xff\xb9\xff\xb8\xff\xb7\xff\xba\xff\xb5\xff\xae\xff\xaf\xff\xab\xff\xac\xff\xaa\xff\x9b\xff\x00\x00\x9c\xff\x99\xff\x97\xff\x95\xff\x93\xff\x91\xff\x00\x00\x00\x00\x79\xff\x8e\xff\x9d\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\xff\xd7\xff\x00\x00\x00\x00\x87\xff\x82\xff\xf5\xff\xea\xff\x80\xff\xef\xff\x00\x00\xe2\xff\xe3\xff\xe1\xff\x00\x00\xcc\xff\x7b\xff\x8d\xff\x00\x00\xca\xff\x00\x00\x00\x00\xb3\xff\xcb\xff\xcd\xff\x00\x00\xed\xff\x00\x00\xde\xff\xdf\xff\x81\xff\x7f\xff\xec\xff\xe0\xff\xf3\xff\xa3\xff"#
-
-happyCheck :: HappyAddr
-happyCheck = HappyA# "\xff\xff\x2a\x00\x01\x00\x06\x00\x03\x00\x00\x00\x0b\x00\x06\x00\x15\x00\x03\x00\x00\x00\x04\x00\x06\x00\x32\x00\x0d\x00\x08\x00\x1d\x00\x0e\x00\x06\x00\x0d\x00\x0b\x00\x00\x00\x0a\x00\x08\x00\x0d\x00\x14\x00\x13\x00\x44\x00\x12\x00\x13\x00\x33\x00\x01\x00\x04\x00\x03\x00\x03\x00\x08\x00\x06\x00\x0a\x00\x25\x00\x12\x00\x13\x00\x28\x00\x33\x00\x0d\x00\x14\x00\x06\x00\x2d\x00\x17\x00\x2f\x00\x30\x00\x31\x00\x2d\x00\x33\x00\x34\x00\x35\x00\x06\x00\x03\x00\x38\x00\x39\x00\x3a\x00\x03\x00\x22\x00\x38\x00\x21\x00\x3a\x00\x44\x00\x41\x00\x42\x00\x43\x00\x44\x00\x28\x00\x41\x00\x42\x00\x43\x00\x44\x00\x2d\x00\x30\x00\x2f\x00\x30\x00\x31\x00\x41\x00\x33\x00\x34\x00\x35\x00\x2d\x00\x03\x00\x38\x00\x39\x00\x3a\x00\x01\x00\x0a\x00\x03\x00\x41\x00\x0d\x00\x06\x00\x41\x00\x42\x00\x43\x00\x44\x00\x0f\x00\x10\x00\x0d\x00\x33\x00\x2e\x00\x41\x00\x42\x00\x43\x00\x44\x00\x03\x00\x08\x00\x35\x00\x0b\x00\x0c\x00\x09\x00\x41\x00\x42\x00\x43\x00\x44\x00\x01\x00\x07\x00\x03\x00\x03\x00\x3d\x00\x06\x00\x2b\x00\x25\x00\x15\x00\x07\x00\x28\x00\x2f\x00\x0d\x00\x0b\x00\x0c\x00\x2d\x00\x34\x00\x2f\x00\x30\x00\x31\x00\x44\x00\x33\x00\x34\x00\x35\x00\x0f\x00\x10\x00\x38\x00\x39\x00\x3a\x00\x01\x00\x03\x00\x03\x00\x11\x00\x2e\x00\x06\x00\x41\x00\x42\x00\x43\x00\x44\x00\x28\x00\x35\x00\x0d\x00\x3e\x00\x00\x00\x2d\x00\x2d\x00\x2f\x00\x30\x00\x31\x00\x31\x00\x33\x00\x34\x00\x35\x00\x0b\x00\x0c\x00\x38\x00\x39\x00\x3a\x00\x03\x00\x44\x00\x11\x00\x06\x00\x13\x00\x3e\x00\x41\x00\x42\x00\x43\x00\x44\x00\x0d\x00\x3e\x00\x16\x00\x19\x00\x2d\x00\x2d\x00\x09\x00\x2f\x00\x31\x00\x0e\x00\x06\x00\x33\x00\x34\x00\x35\x00\x05\x00\x3c\x00\x38\x00\x39\x00\x3a\x00\x3f\x00\x1e\x00\x44\x00\x2e\x00\x3e\x00\x03\x00\x41\x00\x42\x00\x43\x00\x44\x00\x07\x00\x44\x00\x44\x00\x2d\x00\x14\x00\x2f\x00\x17\x00\x3b\x00\x1e\x00\x33\x00\x34\x00\x35\x00\x3e\x00\x15\x00\x38\x00\x39\x00\x3a\x00\x2a\x00\x3d\x00\x12\x00\x2d\x00\x44\x00\x14\x00\x41\x00\x42\x00\x43\x00\x44\x00\x00\x00\x01\x00\x02\x00\x03\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x1d\x00\x24\x00\x11\x00\x2e\x00\x03\x00\x41\x00\x42\x00\x43\x00\x44\x00\x16\x00\x35\x00\x19\x00\x09\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\x2c\x00\x05\x00\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x3c\x00\x2b\x00\x35\x00\x1e\x00\x3f\x00\x2f\x00\x44\x00\x03\x00\x03\x00\x1c\x00\x34\x00\x12\x00\x23\x00\x44\x00\x1a\x00\x45\x00\x45\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\x41\x00\x2c\x00\x29\x00\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x2b\x00\x2b\x00\x35\x00\x23\x00\x2f\x00\x2f\x00\x27\x00\xff\xff\xff\xff\x34\x00\x34\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x1a\x00\x35\x00\xff\xff\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x23\x00\x0c\x00\xff\xff\x26\x00\x27\x00\xff\xff\x29\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\x40\x00\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x32\x00\xff\xff\x35\x00\xff\xff\x36\x00\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\xff\xff\x0c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\x15\x00\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\x15\x00\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\x15\x00\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\x15\x00\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x1a\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x29\x00\xff\xff\x15\x00\x2c\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\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\xff\xff\x2c\x00\x15\x00\x2e\x00\x45\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\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\xff\xff\x2c\x00\x15\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\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\xff\xff\x2c\x00\x15\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\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\xff\xff\x2c\x00\x15\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\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\xff\xff\x2c\x00\x15\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\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\xff\xff\x2c\x00\x15\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\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\xff\xff\x2c\x00\x15\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\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\xff\xff\x2c\x00\x15\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\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\xff\xff\x2c\x00\x15\x00\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x15\x00\xff\xff\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\x35\x00\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\x15\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x15\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x15\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x15\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x15\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x15\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\x03\x00\xff\xff\x02\x00\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\x03\x00\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\x35\x00\x1d\x00\xff\xff\x1f\x00\x20\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\x03\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\x34\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\x03\x00\xff\xff\x03\x00\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\x15\x00\x2e\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\x2a\x00\xff\xff\x2e\x00\x03\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\x35\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\x03\x00\xff\xff\xff\xff\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\xff\xff\x03\x00\xff\xff\xff\xff\xff\xff\x15\x00\x35\x00\xff\xff\xff\xff\x03\x00\xff\xff\xff\xff\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x15\x00\xff\xff\x2e\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\x35\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\x29\x00\x2a\x00\xff\xff\xff\xff\x35\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\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"#
-
-happyTable :: HappyAddr
-happyTable = HappyA# "\x00\x00\x72\x00\x42\x00\xa9\x00\x43\x00\x61\x00\xdb\x00\x44\x00\xd6\x00\x43\x00\x5a\x00\x84\x00\x44\x00\xc2\x00\x45\x00\x85\x00\xd7\x00\xba\x00\x0d\x00\x45\x00\xc0\x00\x5a\x00\x0e\x00\x64\x00\x64\x00\x62\x00\x86\x00\x54\x00\xc6\x00\x5c\x00\x54\x00\x42\x00\x10\x00\x43\x00\x56\x00\x5e\x00\x44\x00\x5f\x00\x67\x00\x5b\x00\x5c\x00\x47\x00\x21\x00\x45\x00\x85\xff\x44\x00\x48\x00\x85\xff\x49\x00\x4a\x00\x4b\x00\x48\x00\x4c\x00\x4d\x00\x4e\x00\x44\x00\x58\x00\x4f\x00\x50\x00\x51\x00\x27\x00\x60\x00\x4f\x00\x46\x00\x51\x00\x54\x00\x07\x00\x52\x00\x53\x00\x54\x00\x47\x00\x07\x00\x52\x00\x53\x00\x54\x00\x48\x00\x11\x00\x49\x00\x4a\x00\x4b\x00\x07\x00\x4c\x00\x4d\x00\x4e\x00\x48\x00\x6d\x00\x4f\x00\x50\x00\x51\x00\x42\x00\x87\x00\x43\x00\x07\x00\x88\x00\x44\x00\x07\x00\x52\x00\x53\x00\x54\x00\xd3\x00\xd4\x00\x45\x00\x23\x00\x3f\x00\x07\x00\x52\x00\x53\x00\x54\x00\x27\x00\x09\x00\xb1\x00\x82\x00\x83\x00\x07\x00\x07\x00\x52\x00\x53\x00\x54\x00\x42\x00\x0b\x00\x43\x00\xbd\x00\xc2\x00\x44\x00\xd3\x00\x56\x00\x59\x00\xb3\x00\x47\x00\x6f\x00\x45\x00\x82\x00\x83\x00\x48\x00\xc9\x00\x49\x00\x4a\x00\x4b\x00\x54\x00\x4c\x00\x4d\x00\x4e\x00\xbc\x00\xbd\x00\x4f\x00\x50\x00\x51\x00\x42\x00\xbd\x00\x43\x00\x7d\x00\x3f\x00\x44\x00\x07\x00\x52\x00\x53\x00\x54\x00\x47\x00\x40\x00\x45\x00\xc4\x00\x1a\x00\x48\x00\xbe\x00\x49\x00\x4a\x00\x4b\x00\xd7\x00\x4c\x00\x4d\x00\x4e\x00\x82\x00\x83\x00\x4f\x00\x50\x00\x51\x00\x43\x00\x54\x00\x1b\x00\x44\x00\x1c\x00\xcc\x00\x07\x00\x52\x00\x53\x00\x54\x00\x45\x00\xce\x00\x7e\x00\x7f\x00\xbe\x00\x48\x00\x80\x00\x49\x00\xbf\x00\x81\x00\x44\x00\x4c\x00\x4d\x00\x4e\x00\x91\x00\x92\x00\x4f\x00\x50\x00\x51\x00\x93\x00\x94\x00\x54\x00\x9b\x00\xb1\x00\x27\x00\x07\x00\x52\x00\x53\x00\x54\x00\xb4\x00\x54\x00\x54\x00\x48\x00\xb6\x00\x49\x00\xb7\x00\xb9\x00\x94\x00\x4c\x00\x4d\x00\x4e\x00\xb8\x00\x28\x00\x4f\x00\x50\x00\x51\x00\x7c\x00\xc2\x00\x58\x00\x48\x00\x54\x00\x66\x00\x07\x00\x52\x00\x53\x00\x54\x00\x24\x00\x25\x00\x26\x00\x27\x00\xab\x00\x3b\x00\x3c\x00\x3d\x00\x61\x00\x78\x00\x7d\x00\x3f\x00\x6d\x00\x07\x00\x52\x00\x53\x00\x54\x00\x7e\x00\x40\x00\x7f\x00\x80\x00\x28\x00\xda\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\x81\x00\x3e\x00\x91\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x92\x00\xaf\x00\x40\x00\x94\x00\x93\x00\x6f\x00\x54\x00\x6d\x00\x6d\x00\x95\x00\x70\x00\x58\x00\x23\x00\x54\x00\x09\x00\xff\xff\xff\xff\x28\x00\xd0\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\x07\x00\x3e\x00\x0b\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\xb4\x00\x6e\x00\x40\x00\x0d\x00\x6f\x00\x6f\x00\x10\x00\x00\x00\x00\x00\x70\x00\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\xd1\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x09\x00\x40\x00\x00\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0e\x00\x0d\x00\x17\x00\x00\x00\x19\x00\x10\x00\x00\x00\x0b\x00\x28\x00\xc8\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\xda\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x1e\x00\x00\x00\x40\x00\x00\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x28\x00\xcc\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x00\x00\x40\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0e\x00\x00\x00\xd8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x73\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\x74\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x95\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\x00\x00\x6a\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x69\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\x00\x00\x6a\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x6b\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\x00\x00\x6a\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x96\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\x00\x00\x6a\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\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\x00\x00\x6a\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\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\x00\x00\x6a\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\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\x00\x00\x6a\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x09\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x19\x00\x10\x00\x00\x00\x0b\x00\x00\x00\x28\x00\x1a\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x76\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\x00\x00\x6a\x00\x28\x00\x3f\x00\xf6\xff\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\xcf\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\x00\x00\x6a\x00\x28\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x9b\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\x00\x00\x6a\x00\x28\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x9c\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\x00\x00\x6a\x00\x28\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x9d\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\x00\x00\x6a\x00\x28\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x9e\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\x00\x00\x6a\x00\x28\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x9f\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\x00\x00\x6a\x00\x28\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\xa0\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\x00\x00\x6a\x00\x28\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x78\x00\x00\x00\x40\x00\xa1\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\x00\x00\x6a\x00\x28\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x7a\x00\x28\x00\x00\x00\x3f\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x00\x40\x00\x00\x00\xa2\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\xa4\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x28\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\xa6\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x28\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\x00\x00\x79\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x28\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\x00\x00\x68\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x28\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\x00\x00\x72\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x28\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x27\x00\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\xdc\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x27\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x8b\x00\x40\x00\x8c\x00\x00\x00\x8d\x00\x8e\x00\xc4\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x27\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x90\x00\x00\x00\x00\x00\xc5\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x27\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x28\x00\x3f\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\xae\x00\x00\x00\x3f\x00\x27\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x40\x00\x00\x00\x00\x00\xb9\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x27\x00\x00\x00\x00\x00\xa7\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x28\x00\x40\x00\x00\x00\x00\x00\x27\x00\x00\x00\x00\x00\xa9\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x28\x00\x00\x00\x3f\x00\xaa\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x40\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\xac\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x00\x00\xad\x00\x3d\x00\x00\x00\x00\x00\x40\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\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 = Happy_Data_Array.array (5, 134) [
-	(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),
-	(119 , happyReduce_119),
-	(120 , happyReduce_120),
-	(121 , happyReduce_121),
-	(122 , happyReduce_122),
-	(123 , happyReduce_123),
-	(124 , happyReduce_124),
-	(125 , happyReduce_125),
-	(126 , happyReduce_126),
-	(127 , happyReduce_127),
-	(128 , happyReduce_128),
-	(129 , happyReduce_129),
-	(130 , happyReduce_130),
-	(131 , happyReduce_131),
-	(132 , happyReduce_132),
-	(133 , happyReduce_133),
-	(134 , happyReduce_134)
-	]
-
-happy_n_terms = 70 :: Int
-happy_n_nonterms = 54 :: Int
-
-happyReduce_5 = happySpecReduce_1  0# happyReduction_5
-happyReduction_5 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn8
-		 (PosInteger (mkPosToken happy_var_1)
-	)}
-
-happyReduce_6 = happySpecReduce_1  1# happyReduction_6
-happyReduction_6 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn9
-		 (PosDouble (mkPosToken happy_var_1)
-	)}
-
-happyReduce_7 = happySpecReduce_1  2# happyReduction_7
-happyReduction_7 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn10
-		 (PosString (mkPosToken happy_var_1)
-	)}
-
-happyReduce_8 = happySpecReduce_1  3# happyReduction_8
-happyReduction_8 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn11
-		 (PosIdent (mkPosToken happy_var_1)
-	)}
-
-happyReduce_9 = happySpecReduce_1  4# happyReduction_9
-happyReduction_9 happy_x_1
-	 =  case happyOut56 happy_x_1 of { happy_var_1 -> 
-	happyIn12
-		 (Module ((mkCatSpan happy_var_1)) (reverse happy_var_1)
-	)}
-
-happyReduce_10 = happyReduce 4# 5# happyReduction_10
-happyReduction_10 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { happy_var_1 -> 
-	case happyOut11 happy_x_2 of { happy_var_2 -> 
-	case happyOutTok happy_x_3 of { happy_var_3 -> 
-	case happyOut57 happy_x_4 of { happy_var_4 -> 
-	happyIn13
-		 (EnumDecl ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_2 happy_var_4
-	) `HappyStk` happyRest}}}}
-
-happyReduce_11 = happySpecReduce_1  5# happyReduction_11
-happyReduction_11 happy_x_1
-	 =  case happyOut20 happy_x_1 of { happy_var_1 -> 
-	happyIn13
-		 (ElementDecl ((mkCatSpan happy_var_1)) happy_var_1
-	)}
-
-happyReduce_12 = happyReduce 8# 6# happyReduction_12
-happyReduction_12 (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 happyOut18 happy_x_1 of { happy_var_1 -> 
-	case happyOut25 happy_x_2 of { happy_var_2 -> 
-	case happyOut11 happy_x_3 of { happy_var_3 -> 
-	case happyOut21 happy_x_4 of { happy_var_4 -> 
-	case happyOut22 happy_x_5 of { happy_var_5 -> 
-	case happyOut26 happy_x_6 of { happy_var_6 -> 
-	case happyOut23 happy_x_7 of { happy_var_7 -> 
-	case happyOut19 happy_x_8 of { happy_var_8 -> 
-	happyIn14
-		 (Clafer ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkCatSpan happy_var_4) >- (mkCatSpan happy_var_5) >- (mkCatSpan happy_var_6) >- (mkCatSpan happy_var_7) >- (mkCatSpan happy_var_8)) happy_var_1 happy_var_2 happy_var_3 happy_var_4 happy_var_5 happy_var_6 happy_var_7 happy_var_8
-	) `HappyStk` happyRest}}}}}}}}
-
-happyReduce_13 = happySpecReduce_3  7# happyReduction_13
-happyReduction_13 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	case happyOut59 happy_x_2 of { happy_var_2 -> 
-	case happyOutTok happy_x_3 of { happy_var_3 -> 
-	happyIn15
-		 (Constraint ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3)) (reverse happy_var_2)
-	)}}}
-
-happyReduce_14 = happyReduce 4# 8# happyReduction_14
-happyReduction_14 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut59 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { happy_var_4 -> 
-	happyIn16
-		 (SoftConstraint ((mkTokenSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkTokenSpan happy_var_4)) (reverse happy_var_3)
-	) `HappyStk` happyRest}}}}
-
-happyReduce_15 = happySpecReduce_3  9# happyReduction_15
-happyReduction_15 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	case happyOut59 happy_x_2 of { happy_var_2 -> 
-	case happyOutTok happy_x_3 of { happy_var_3 -> 
-	happyIn17
-		 (Goal ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3)) (reverse happy_var_2)
-	)}}}
-
-happyReduce_16 = happySpecReduce_0  10# happyReduction_16
-happyReduction_16  =  happyIn18
-		 (AbstractEmpty noSpan
-	)
-
-happyReduce_17 = happySpecReduce_1  10# happyReduction_17
-happyReduction_17 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn18
-		 (Abstract ((mkTokenSpan happy_var_1))
-	)}
-
-happyReduce_18 = happySpecReduce_0  11# happyReduction_18
-happyReduction_18  =  happyIn19
-		 (ElementsEmpty noSpan
-	)
-
-happyReduce_19 = happySpecReduce_3  11# happyReduction_19
-happyReduction_19 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	case happyOut58 happy_x_2 of { happy_var_2 -> 
-	case happyOutTok happy_x_3 of { happy_var_3 -> 
-	happyIn19
-		 (ElementsList ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3)) (reverse happy_var_2)
-	)}}}
-
-happyReduce_20 = happySpecReduce_1  12# happyReduction_20
-happyReduction_20 happy_x_1
-	 =  case happyOut14 happy_x_1 of { happy_var_1 -> 
-	happyIn20
-		 (Subclafer ((mkCatSpan happy_var_1)) happy_var_1
-	)}
-
-happyReduce_21 = happyReduce 4# 12# happyReduction_21
-happyReduction_21 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { happy_var_1 -> 
-	case happyOut29 happy_x_2 of { happy_var_2 -> 
-	case happyOut26 happy_x_3 of { happy_var_3 -> 
-	case happyOut19 happy_x_4 of { happy_var_4 -> 
-	happyIn20
-		 (ClaferUse ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_2 happy_var_3 happy_var_4
-	) `HappyStk` happyRest}}}}
-
-happyReduce_22 = happySpecReduce_1  12# happyReduction_22
-happyReduction_22 happy_x_1
-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
-	happyIn20
-		 (Subconstraint ((mkCatSpan happy_var_1)) happy_var_1
-	)}
-
-happyReduce_23 = happySpecReduce_1  12# happyReduction_23
-happyReduction_23 happy_x_1
-	 =  case happyOut17 happy_x_1 of { happy_var_1 -> 
-	happyIn20
-		 (Subgoal ((mkCatSpan happy_var_1)) happy_var_1
-	)}
-
-happyReduce_24 = happySpecReduce_1  12# happyReduction_24
-happyReduction_24 happy_x_1
-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
-	happyIn20
-		 (Subsoftconstraint ((mkCatSpan happy_var_1)) happy_var_1
-	)}
-
-happyReduce_25 = happySpecReduce_0  13# happyReduction_25
-happyReduction_25  =  happyIn21
-		 (SuperEmpty noSpan
-	)
-
-happyReduce_26 = happySpecReduce_2  13# happyReduction_26
-happyReduction_26 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	case happyOut44 happy_x_2 of { happy_var_2 -> 
-	happyIn21
-		 (SuperSome ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
-	)}}
-
-happyReduce_27 = happySpecReduce_0  14# happyReduction_27
-happyReduction_27  =  happyIn22
-		 (ReferenceEmpty noSpan
-	)
-
-happyReduce_28 = happySpecReduce_2  14# happyReduction_28
-happyReduction_28 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	case happyOut44 happy_x_2 of { happy_var_2 -> 
-	happyIn22
-		 (ReferenceSet ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
-	)}}
-
-happyReduce_29 = happySpecReduce_2  14# happyReduction_29
-happyReduction_29 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	case happyOut44 happy_x_2 of { happy_var_2 -> 
-	happyIn22
-		 (ReferenceBag ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
-	)}}
-
-happyReduce_30 = happySpecReduce_0  15# happyReduction_30
-happyReduction_30  =  happyIn23
-		 (InitEmpty noSpan
-	)
-
-happyReduce_31 = happySpecReduce_2  15# happyReduction_31
-happyReduction_31 happy_x_2
-	happy_x_1
-	 =  case happyOut24 happy_x_1 of { happy_var_1 -> 
-	case happyOut30 happy_x_2 of { happy_var_2 -> 
-	happyIn23
-		 (InitSome ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_1 happy_var_2
-	)}}
-
-happyReduce_32 = happySpecReduce_1  16# happyReduction_32
-happyReduction_32 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn24
-		 (InitConstant ((mkTokenSpan happy_var_1))
-	)}
-
-happyReduce_33 = happySpecReduce_1  16# happyReduction_33
-happyReduction_33 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn24
-		 (InitDefault ((mkTokenSpan happy_var_1))
-	)}
-
-happyReduce_34 = happySpecReduce_0  17# happyReduction_34
-happyReduction_34  =  happyIn25
-		 (GCardEmpty noSpan
-	)
-
-happyReduce_35 = happySpecReduce_1  17# happyReduction_35
-happyReduction_35 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn25
-		 (GCardXor ((mkTokenSpan happy_var_1))
-	)}
-
-happyReduce_36 = happySpecReduce_1  17# happyReduction_36
-happyReduction_36 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn25
-		 (GCardOr ((mkTokenSpan happy_var_1))
-	)}
-
-happyReduce_37 = happySpecReduce_1  17# happyReduction_37
-happyReduction_37 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn25
-		 (GCardMux ((mkTokenSpan happy_var_1))
-	)}
-
-happyReduce_38 = happySpecReduce_1  17# happyReduction_38
-happyReduction_38 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn25
-		 (GCardOpt ((mkTokenSpan happy_var_1))
-	)}
-
-happyReduce_39 = happySpecReduce_1  17# happyReduction_39
-happyReduction_39 happy_x_1
-	 =  case happyOut27 happy_x_1 of { happy_var_1 -> 
-	happyIn25
-		 (GCardInterval ((mkCatSpan happy_var_1)) happy_var_1
-	)}
-
-happyReduce_40 = happySpecReduce_0  18# happyReduction_40
-happyReduction_40  =  happyIn26
-		 (CardEmpty noSpan
-	)
-
-happyReduce_41 = happySpecReduce_1  18# happyReduction_41
-happyReduction_41 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn26
-		 (CardLone ((mkTokenSpan happy_var_1))
-	)}
-
-happyReduce_42 = happySpecReduce_1  18# happyReduction_42
-happyReduction_42 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn26
-		 (CardSome ((mkTokenSpan happy_var_1))
-	)}
-
-happyReduce_43 = happySpecReduce_1  18# happyReduction_43
-happyReduction_43 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn26
-		 (CardAny ((mkTokenSpan happy_var_1))
-	)}
-
-happyReduce_44 = happySpecReduce_1  18# happyReduction_44
-happyReduction_44 happy_x_1
-	 =  case happyOut8 happy_x_1 of { happy_var_1 -> 
-	happyIn26
-		 (CardNum ((mkCatSpan happy_var_1)) happy_var_1
-	)}
-
-happyReduce_45 = happySpecReduce_1  18# happyReduction_45
-happyReduction_45 happy_x_1
-	 =  case happyOut27 happy_x_1 of { happy_var_1 -> 
-	happyIn26
-		 (CardInterval ((mkCatSpan happy_var_1)) happy_var_1
-	)}
-
-happyReduce_46 = happySpecReduce_3  19# happyReduction_46
-happyReduction_46 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut8 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut28 happy_x_3 of { happy_var_3 -> 
-	happyIn27
-		 (NCard ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_47 = happySpecReduce_1  20# happyReduction_47
-happyReduction_47 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn28
-		 (ExIntegerAst ((mkTokenSpan happy_var_1))
-	)}
-
-happyReduce_48 = happySpecReduce_1  20# happyReduction_48
-happyReduction_48 happy_x_1
-	 =  case happyOut8 happy_x_1 of { happy_var_1 -> 
-	happyIn28
-		 (ExIntegerNum ((mkCatSpan happy_var_1)) happy_var_1
-	)}
-
-happyReduce_49 = happySpecReduce_1  21# happyReduction_49
-happyReduction_49 happy_x_1
-	 =  case happyOut61 happy_x_1 of { happy_var_1 -> 
-	happyIn29
-		 (Path ((mkCatSpan happy_var_1)) happy_var_1
-	)}
-
-happyReduce_50 = happyReduce 5# 22# happyReduction_50
-happyReduction_50 (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 { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut51 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { happy_var_4 -> 
-	case happyOut30 happy_x_5 of { happy_var_5 -> 
-	happyIn30
-		 (DeclAllDisj ((mkTokenSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkTokenSpan happy_var_4) >- (mkCatSpan happy_var_5)) happy_var_3 happy_var_5
-	) `HappyStk` happyRest}}}}}
-
-happyReduce_51 = happyReduce 4# 22# happyReduction_51
-happyReduction_51 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { happy_var_1 -> 
-	case happyOut51 happy_x_2 of { happy_var_2 -> 
-	case happyOutTok happy_x_3 of { happy_var_3 -> 
-	case happyOut30 happy_x_4 of { happy_var_4 -> 
-	happyIn30
-		 (DeclAll ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_2 happy_var_4
-	) `HappyStk` happyRest}}}}
-
-happyReduce_52 = happyReduce 5# 22# happyReduction_52
-happyReduction_52 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut52 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut51 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { happy_var_4 -> 
-	case happyOut30 happy_x_5 of { happy_var_5 -> 
-	happyIn30
-		 (DeclQuantDisj ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkTokenSpan happy_var_4) >- (mkCatSpan happy_var_5)) happy_var_1 happy_var_3 happy_var_5
-	) `HappyStk` happyRest}}}}}
-
-happyReduce_53 = happyReduce 4# 22# happyReduction_53
-happyReduction_53 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut52 happy_x_1 of { happy_var_1 -> 
-	case happyOut51 happy_x_2 of { happy_var_2 -> 
-	case happyOutTok happy_x_3 of { happy_var_3 -> 
-	case happyOut30 happy_x_4 of { happy_var_4 -> 
-	happyIn30
-		 (DeclQuant ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_1 happy_var_2 happy_var_4
-	) `HappyStk` happyRest}}}}
-
-happyReduce_54 = happySpecReduce_1  22# happyReduction_54
-happyReduction_54 happy_x_1
-	 =  case happyOut31 happy_x_1 of { happy_var_1 -> 
-	happyIn30
-		 (happy_var_1
-	)}
-
-happyReduce_55 = happySpecReduce_2  23# happyReduction_55
-happyReduction_55 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	case happyOut32 happy_x_2 of { happy_var_2 -> 
-	happyIn31
-		 (EGMax ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
-	)}}
-
-happyReduce_56 = happySpecReduce_2  23# happyReduction_56
-happyReduction_56 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	case happyOut32 happy_x_2 of { happy_var_2 -> 
-	happyIn31
-		 (EGMin ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
-	)}}
-
-happyReduce_57 = happySpecReduce_3  23# happyReduction_57
-happyReduction_57 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut31 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut32 happy_x_3 of { happy_var_3 -> 
-	happyIn31
-		 (EIff ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_58 = happySpecReduce_1  23# happyReduction_58
-happyReduction_58 happy_x_1
-	 =  case happyOut32 happy_x_1 of { happy_var_1 -> 
-	happyIn31
-		 (happy_var_1
-	)}
-
-happyReduce_59 = happySpecReduce_3  24# happyReduction_59
-happyReduction_59 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut32 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut33 happy_x_3 of { happy_var_3 -> 
-	happyIn32
-		 (EImplies ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_60 = happySpecReduce_1  24# happyReduction_60
-happyReduction_60 happy_x_1
-	 =  case happyOut33 happy_x_1 of { happy_var_1 -> 
-	happyIn32
-		 (happy_var_1
-	)}
-
-happyReduce_61 = happySpecReduce_3  25# happyReduction_61
-happyReduction_61 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut33 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut34 happy_x_3 of { happy_var_3 -> 
-	happyIn33
-		 (EOr ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_62 = happySpecReduce_1  25# happyReduction_62
-happyReduction_62 happy_x_1
-	 =  case happyOut34 happy_x_1 of { happy_var_1 -> 
-	happyIn33
-		 (happy_var_1
-	)}
-
-happyReduce_63 = happySpecReduce_3  26# happyReduction_63
-happyReduction_63 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut34 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut35 happy_x_3 of { happy_var_3 -> 
-	happyIn34
-		 (EXor ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_64 = happySpecReduce_1  26# happyReduction_64
-happyReduction_64 happy_x_1
-	 =  case happyOut35 happy_x_1 of { happy_var_1 -> 
-	happyIn34
-		 (happy_var_1
-	)}
-
-happyReduce_65 = happySpecReduce_3  27# happyReduction_65
-happyReduction_65 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut35 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut36 happy_x_3 of { happy_var_3 -> 
-	happyIn35
-		 (EAnd ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_66 = happySpecReduce_1  27# happyReduction_66
-happyReduction_66 happy_x_1
-	 =  case happyOut36 happy_x_1 of { happy_var_1 -> 
-	happyIn35
-		 (happy_var_1
-	)}
-
-happyReduce_67 = happySpecReduce_2  28# happyReduction_67
-happyReduction_67 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	case happyOut37 happy_x_2 of { happy_var_2 -> 
-	happyIn36
-		 (ENeg ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
-	)}}
-
-happyReduce_68 = happySpecReduce_1  28# happyReduction_68
-happyReduction_68 happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	happyIn36
-		 (happy_var_1
-	)}
-
-happyReduce_69 = happySpecReduce_3  29# happyReduction_69
-happyReduction_69 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut38 happy_x_3 of { happy_var_3 -> 
-	happyIn37
-		 (ELt ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_70 = happySpecReduce_3  29# happyReduction_70
-happyReduction_70 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut38 happy_x_3 of { happy_var_3 -> 
-	happyIn37
-		 (EGt ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_71 = happySpecReduce_3  29# happyReduction_71
-happyReduction_71 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut38 happy_x_3 of { happy_var_3 -> 
-	happyIn37
-		 (EEq ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_72 = happySpecReduce_3  29# happyReduction_72
-happyReduction_72 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut38 happy_x_3 of { happy_var_3 -> 
-	happyIn37
-		 (ELte ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_73 = happySpecReduce_3  29# happyReduction_73
-happyReduction_73 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut38 happy_x_3 of { happy_var_3 -> 
-	happyIn37
-		 (EGte ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_74 = happySpecReduce_3  29# happyReduction_74
-happyReduction_74 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut38 happy_x_3 of { happy_var_3 -> 
-	happyIn37
-		 (ENeq ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_75 = happySpecReduce_3  29# happyReduction_75
-happyReduction_75 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut38 happy_x_3 of { happy_var_3 -> 
-	happyIn37
-		 (EIn ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_76 = happyReduce 4# 29# happyReduction_76
-happyReduction_76 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut37 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOutTok happy_x_3 of { happy_var_3 -> 
-	case happyOut38 happy_x_4 of { happy_var_4 -> 
-	happyIn37
-		 (ENin ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_1 happy_var_4
-	) `HappyStk` happyRest}}}}
-
-happyReduce_77 = happySpecReduce_1  29# happyReduction_77
-happyReduction_77 happy_x_1
-	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
-	happyIn37
-		 (happy_var_1
-	)}
-
-happyReduce_78 = happySpecReduce_2  30# happyReduction_78
-happyReduction_78 happy_x_2
-	happy_x_1
-	 =  case happyOut52 happy_x_1 of { happy_var_1 -> 
-	case happyOut42 happy_x_2 of { happy_var_2 -> 
-	happyIn38
-		 (QuantExp ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_1 happy_var_2
-	)}}
-
-happyReduce_79 = happySpecReduce_1  30# happyReduction_79
-happyReduction_79 happy_x_1
-	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
-	happyIn38
-		 (happy_var_1
-	)}
-
-happyReduce_80 = happySpecReduce_3  31# happyReduction_80
-happyReduction_80 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut40 happy_x_3 of { happy_var_3 -> 
-	happyIn39
-		 (EAdd ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_81 = happySpecReduce_3  31# happyReduction_81
-happyReduction_81 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut40 happy_x_3 of { happy_var_3 -> 
-	happyIn39
-		 (ESub ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_82 = happySpecReduce_1  31# happyReduction_82
-happyReduction_82 happy_x_1
-	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
-	happyIn39
-		 (happy_var_1
-	)}
-
-happyReduce_83 = happySpecReduce_3  32# happyReduction_83
-happyReduction_83 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut41 happy_x_3 of { happy_var_3 -> 
-	happyIn40
-		 (EMul ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_84 = happySpecReduce_3  32# happyReduction_84
-happyReduction_84 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut41 happy_x_3 of { happy_var_3 -> 
-	happyIn40
-		 (EDiv ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_85 = happySpecReduce_3  32# happyReduction_85
-happyReduction_85 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut41 happy_x_3 of { happy_var_3 -> 
-	happyIn40
-		 (ERem ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_86 = happySpecReduce_1  32# happyReduction_86
-happyReduction_86 happy_x_1
-	 =  case happyOut41 happy_x_1 of { happy_var_1 -> 
-	happyIn40
-		 (happy_var_1
-	)}
-
-happyReduce_87 = happySpecReduce_2  33# happyReduction_87
-happyReduction_87 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	case happyOut42 happy_x_2 of { happy_var_2 -> 
-	happyIn41
-		 (ESumSetExp ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
-	)}}
-
-happyReduce_88 = happySpecReduce_2  33# happyReduction_88
-happyReduction_88 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	case happyOut42 happy_x_2 of { happy_var_2 -> 
-	happyIn41
-		 (EProdSetExp ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
-	)}}
-
-happyReduce_89 = happySpecReduce_2  33# happyReduction_89
-happyReduction_89 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	case happyOut42 happy_x_2 of { happy_var_2 -> 
-	happyIn41
-		 (ECSetExp ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
-	)}}
-
-happyReduce_90 = happySpecReduce_2  33# happyReduction_90
-happyReduction_90 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	case happyOut42 happy_x_2 of { happy_var_2 -> 
-	happyIn41
-		 (EMinExp ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
-	)}}
-
-happyReduce_91 = happySpecReduce_1  33# happyReduction_91
-happyReduction_91 happy_x_1
-	 =  case happyOut42 happy_x_1 of { happy_var_1 -> 
-	happyIn41
-		 (happy_var_1
-	)}
-
-happyReduce_92 = happyReduce 6# 34# happyReduction_92
-happyReduction_92 (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_1 of { happy_var_1 -> 
-	case happyOut42 happy_x_2 of { happy_var_2 -> 
-	case happyOutTok happy_x_3 of { happy_var_3 -> 
-	case happyOut42 happy_x_4 of { happy_var_4 -> 
-	case happyOutTok happy_x_5 of { happy_var_5 -> 
-	case happyOut43 happy_x_6 of { happy_var_6 -> 
-	happyIn42
-		 (EImpliesElse ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4) >- (mkTokenSpan happy_var_5) >- (mkCatSpan happy_var_6)) happy_var_2 happy_var_4 happy_var_6
-	) `HappyStk` happyRest}}}}}}
-
-happyReduce_93 = happySpecReduce_1  34# happyReduction_93
-happyReduction_93 happy_x_1
-	 =  case happyOut43 happy_x_1 of { happy_var_1 -> 
-	happyIn42
-		 (happy_var_1
-	)}
-
-happyReduce_94 = happySpecReduce_1  35# happyReduction_94
-happyReduction_94 happy_x_1
-	 =  case happyOut8 happy_x_1 of { happy_var_1 -> 
-	happyIn43
-		 (EInt ((mkCatSpan happy_var_1)) happy_var_1
-	)}
-
-happyReduce_95 = happySpecReduce_1  35# happyReduction_95
-happyReduction_95 happy_x_1
-	 =  case happyOut9 happy_x_1 of { happy_var_1 -> 
-	happyIn43
-		 (EDouble ((mkCatSpan happy_var_1)) happy_var_1
-	)}
-
-happyReduce_96 = happySpecReduce_1  35# happyReduction_96
-happyReduction_96 happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	happyIn43
-		 (EStr ((mkCatSpan happy_var_1)) happy_var_1
-	)}
-
-happyReduce_97 = happySpecReduce_1  35# happyReduction_97
-happyReduction_97 happy_x_1
-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> 
-	happyIn43
-		 (ESetExp ((mkCatSpan happy_var_1)) happy_var_1
-	)}
-
-happyReduce_98 = happySpecReduce_3  35# happyReduction_98
-happyReduction_98 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut30 happy_x_2 of { happy_var_2 -> 
-	happyIn43
-		 (happy_var_2
-	)}
-
-happyReduce_99 = happySpecReduce_3  36# happyReduction_99
-happyReduction_99 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut45 happy_x_3 of { happy_var_3 -> 
-	happyIn44
-		 (Union ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_100 = happySpecReduce_3  36# happyReduction_100
-happyReduction_100 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut45 happy_x_3 of { happy_var_3 -> 
-	happyIn44
-		 (UnionCom ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_101 = happySpecReduce_1  36# happyReduction_101
-happyReduction_101 happy_x_1
-	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
-	happyIn44
-		 (happy_var_1
-	)}
-
-happyReduce_102 = happySpecReduce_3  37# happyReduction_102
-happyReduction_102 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut46 happy_x_3 of { happy_var_3 -> 
-	happyIn45
-		 (Difference ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_103 = happySpecReduce_1  37# happyReduction_103
-happyReduction_103 happy_x_1
-	 =  case happyOut46 happy_x_1 of { happy_var_1 -> 
-	happyIn45
-		 (happy_var_1
-	)}
-
-happyReduce_104 = happySpecReduce_3  38# happyReduction_104
-happyReduction_104 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut46 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut47 happy_x_3 of { happy_var_3 -> 
-	happyIn46
-		 (Intersection ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_105 = happySpecReduce_1  38# happyReduction_105
-happyReduction_105 happy_x_1
-	 =  case happyOut47 happy_x_1 of { happy_var_1 -> 
-	happyIn46
-		 (happy_var_1
-	)}
-
-happyReduce_106 = happySpecReduce_3  39# happyReduction_106
-happyReduction_106 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut47 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut48 happy_x_3 of { happy_var_3 -> 
-	happyIn47
-		 (Domain ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_107 = happySpecReduce_1  39# happyReduction_107
-happyReduction_107 happy_x_1
-	 =  case happyOut48 happy_x_1 of { happy_var_1 -> 
-	happyIn47
-		 (happy_var_1
-	)}
-
-happyReduce_108 = happySpecReduce_3  40# happyReduction_108
-happyReduction_108 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut48 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut49 happy_x_3 of { happy_var_3 -> 
-	happyIn48
-		 (Range ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_109 = happySpecReduce_1  40# happyReduction_109
-happyReduction_109 happy_x_1
-	 =  case happyOut49 happy_x_1 of { happy_var_1 -> 
-	happyIn48
-		 (happy_var_1
-	)}
-
-happyReduce_110 = happySpecReduce_3  41# happyReduction_110
-happyReduction_110 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut49 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut50 happy_x_3 of { happy_var_3 -> 
-	happyIn49
-		 (Join ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_111 = happySpecReduce_1  41# happyReduction_111
-happyReduction_111 happy_x_1
-	 =  case happyOut50 happy_x_1 of { happy_var_1 -> 
-	happyIn49
-		 (happy_var_1
-	)}
-
-happyReduce_112 = happySpecReduce_1  42# happyReduction_112
-happyReduction_112 happy_x_1
-	 =  case happyOut29 happy_x_1 of { happy_var_1 -> 
-	happyIn50
-		 (ClaferId ((mkCatSpan happy_var_1)) happy_var_1
-	)}
-
-happyReduce_113 = happySpecReduce_3  42# happyReduction_113
-happyReduction_113 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut44 happy_x_2 of { happy_var_2 -> 
-	happyIn50
-		 (happy_var_2
-	)}
-
-happyReduce_114 = happySpecReduce_3  43# happyReduction_114
-happyReduction_114 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut60 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { happy_var_2 -> 
-	case happyOut44 happy_x_3 of { happy_var_3 -> 
-	happyIn51
-		 (Decl ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
-	)}}}
-
-happyReduce_115 = happySpecReduce_1  44# happyReduction_115
-happyReduction_115 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn52
-		 (QuantNo ((mkTokenSpan happy_var_1))
-	)}
-
-happyReduce_116 = happySpecReduce_1  44# happyReduction_116
-happyReduction_116 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn52
-		 (QuantNot ((mkTokenSpan happy_var_1))
-	)}
-
-happyReduce_117 = happySpecReduce_1  44# happyReduction_117
-happyReduction_117 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn52
-		 (QuantLone ((mkTokenSpan happy_var_1))
-	)}
-
-happyReduce_118 = happySpecReduce_1  44# happyReduction_118
-happyReduction_118 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn52
-		 (QuantOne ((mkTokenSpan happy_var_1))
-	)}
-
-happyReduce_119 = happySpecReduce_1  44# happyReduction_119
-happyReduction_119 happy_x_1
-	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
-	happyIn52
-		 (QuantSome ((mkTokenSpan happy_var_1))
-	)}
-
-happyReduce_120 = happySpecReduce_1  45# happyReduction_120
-happyReduction_120 happy_x_1
-	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
-	happyIn53
-		 (EnumIdIdent ((mkCatSpan happy_var_1)) happy_var_1
-	)}
-
-happyReduce_121 = happySpecReduce_1  46# happyReduction_121
-happyReduction_121 happy_x_1
-	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
-	happyIn54
-		 (ModIdIdent ((mkCatSpan happy_var_1)) happy_var_1
-	)}
-
-happyReduce_122 = happySpecReduce_1  47# happyReduction_122
-happyReduction_122 happy_x_1
-	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
-	happyIn55
-		 (LocIdIdent ((mkCatSpan happy_var_1)) happy_var_1
-	)}
-
-happyReduce_123 = happySpecReduce_0  48# happyReduction_123
-happyReduction_123  =  happyIn56
-		 ([]
-	)
-
-happyReduce_124 = happySpecReduce_2  48# happyReduction_124
-happyReduction_124 happy_x_2
-	happy_x_1
-	 =  case happyOut56 happy_x_1 of { happy_var_1 -> 
-	case happyOut13 happy_x_2 of { happy_var_2 -> 
-	happyIn56
-		 (flip (:)  happy_var_1 happy_var_2
-	)}}
-
-happyReduce_125 = happySpecReduce_1  49# happyReduction_125
-happyReduction_125 happy_x_1
-	 =  case happyOut53 happy_x_1 of { happy_var_1 -> 
-	happyIn57
-		 ((:[])  happy_var_1
-	)}
-
-happyReduce_126 = happySpecReduce_3  49# happyReduction_126
-happyReduction_126 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut53 happy_x_1 of { happy_var_1 -> 
-	case happyOut57 happy_x_3 of { happy_var_3 -> 
-	happyIn57
-		 ((:)  happy_var_1 happy_var_3
-	)}}
-
-happyReduce_127 = happySpecReduce_0  50# happyReduction_127
-happyReduction_127  =  happyIn58
-		 ([]
-	)
-
-happyReduce_128 = happySpecReduce_2  50# happyReduction_128
-happyReduction_128 happy_x_2
-	happy_x_1
-	 =  case happyOut58 happy_x_1 of { happy_var_1 -> 
-	case happyOut20 happy_x_2 of { happy_var_2 -> 
-	happyIn58
-		 (flip (:)  happy_var_1 happy_var_2
-	)}}
-
-happyReduce_129 = happySpecReduce_0  51# happyReduction_129
-happyReduction_129  =  happyIn59
-		 ([]
-	)
-
-happyReduce_130 = happySpecReduce_2  51# happyReduction_130
-happyReduction_130 happy_x_2
-	happy_x_1
-	 =  case happyOut59 happy_x_1 of { happy_var_1 -> 
-	case happyOut30 happy_x_2 of { happy_var_2 -> 
-	happyIn59
-		 (flip (:)  happy_var_1 happy_var_2
-	)}}
-
-happyReduce_131 = happySpecReduce_1  52# happyReduction_131
-happyReduction_131 happy_x_1
-	 =  case happyOut55 happy_x_1 of { happy_var_1 -> 
-	happyIn60
-		 ((:[])  happy_var_1
-	)}
-
-happyReduce_132 = happySpecReduce_3  52# happyReduction_132
-happyReduction_132 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut55 happy_x_1 of { happy_var_1 -> 
-	case happyOut60 happy_x_3 of { happy_var_3 -> 
-	happyIn60
-		 ((:)  happy_var_1 happy_var_3
-	)}}
-
-happyReduce_133 = happySpecReduce_1  53# happyReduction_133
-happyReduction_133 happy_x_1
-	 =  case happyOut54 happy_x_1 of { happy_var_1 -> 
-	happyIn61
-		 ((:[])  happy_var_1
-	)}
-
-happyReduce_134 = happySpecReduce_3  53# happyReduction_134
-happyReduction_134 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut54 happy_x_1 of { happy_var_1 -> 
-	case happyOut61 happy_x_3 of { happy_var_3 -> 
-	happyIn61
-		 ((:)  happy_var_1 happy_var_3
-	)}}
-
-happyNewToken action sts stk [] =
-	happyDoAction 69# notHappyAtAll action sts stk []
-
-happyNewToken action sts stk (tk:tks) =
-	let cont i = happyDoAction i tk action sts stk tks in
-	case tk of {
-	PT _ (TS _ 1) -> cont 1#;
-	PT _ (TS _ 2) -> cont 2#;
-	PT _ (TS _ 3) -> cont 3#;
-	PT _ (TS _ 4) -> cont 4#;
-	PT _ (TS _ 5) -> cont 5#;
-	PT _ (TS _ 6) -> cont 6#;
-	PT _ (TS _ 7) -> cont 7#;
-	PT _ (TS _ 8) -> cont 8#;
-	PT _ (TS _ 9) -> cont 9#;
-	PT _ (TS _ 10) -> cont 10#;
-	PT _ (TS _ 11) -> cont 11#;
-	PT _ (TS _ 12) -> cont 12#;
-	PT _ (TS _ 13) -> cont 13#;
-	PT _ (TS _ 14) -> cont 14#;
-	PT _ (TS _ 15) -> cont 15#;
-	PT _ (TS _ 16) -> cont 16#;
-	PT _ (TS _ 17) -> cont 17#;
-	PT _ (TS _ 18) -> cont 18#;
-	PT _ (TS _ 19) -> cont 19#;
-	PT _ (TS _ 20) -> cont 20#;
-	PT _ (TS _ 21) -> cont 21#;
-	PT _ (TS _ 22) -> cont 22#;
-	PT _ (TS _ 23) -> cont 23#;
-	PT _ (TS _ 24) -> cont 24#;
-	PT _ (TS _ 25) -> cont 25#;
-	PT _ (TS _ 26) -> cont 26#;
-	PT _ (TS _ 27) -> cont 27#;
-	PT _ (TS _ 28) -> cont 28#;
-	PT _ (TS _ 29) -> cont 29#;
-	PT _ (TS _ 30) -> cont 30#;
-	PT _ (TS _ 31) -> cont 31#;
-	PT _ (TS _ 32) -> cont 32#;
-	PT _ (TS _ 33) -> cont 33#;
-	PT _ (TS _ 34) -> cont 34#;
-	PT _ (TS _ 35) -> cont 35#;
-	PT _ (TS _ 36) -> cont 36#;
-	PT _ (TS _ 37) -> cont 37#;
-	PT _ (TS _ 38) -> cont 38#;
-	PT _ (TS _ 39) -> cont 39#;
-	PT _ (TS _ 40) -> cont 40#;
-	PT _ (TS _ 41) -> cont 41#;
-	PT _ (TS _ 42) -> cont 42#;
-	PT _ (TS _ 43) -> cont 43#;
-	PT _ (TS _ 44) -> cont 44#;
-	PT _ (TS _ 45) -> cont 45#;
-	PT _ (TS _ 46) -> cont 46#;
-	PT _ (TS _ 47) -> cont 47#;
-	PT _ (TS _ 48) -> cont 48#;
-	PT _ (TS _ 49) -> cont 49#;
-	PT _ (TS _ 50) -> cont 50#;
-	PT _ (TS _ 51) -> cont 51#;
-	PT _ (TS _ 52) -> cont 52#;
-	PT _ (TS _ 53) -> cont 53#;
-	PT _ (TS _ 54) -> cont 54#;
-	PT _ (TS _ 55) -> cont 55#;
-	PT _ (TS _ 56) -> cont 56#;
-	PT _ (TS _ 57) -> cont 57#;
-	PT _ (TS _ 58) -> cont 58#;
-	PT _ (TS _ 59) -> cont 59#;
-	PT _ (TS _ 60) -> cont 60#;
-	PT _ (TS _ 61) -> cont 61#;
-	PT _ (TS _ 62) -> cont 62#;
-	PT _ (TS _ 63) -> cont 63#;
-	PT _ (TS _ 64) -> cont 64#;
-	PT _ (T_PosInteger _) -> cont 65#;
-	PT _ (T_PosDouble _) -> cont 66#;
-	PT _ (T_PosString _) -> cont 67#;
-	PT _ (T_PosIdent _) -> cont 68#;
-	_ -> happyError' (tk:tks)
-	}
-
-happyError_ 69# tk tks = happyError' tks
-happyError_ _ tk tks = happyError' (tk:tks)
-
-happyThen :: () => Err a -> (a -> Err b) -> Err b
-happyThen = (thenM)
-happyReturn :: () => a -> Err a
-happyReturn = (returnM)
-happyThen1 m k tks = (thenM) m (\a -> k a tks)
-happyReturn1 :: () => a -> b -> Err a
-happyReturn1 = \a tks -> (returnM) a
-happyError' :: () => [(Token)] -> Err a
-happyError' = happyError
-
-pModule tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut12 x))
-
-pClafer tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut14 x))
-
-pConstraint tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 2# tks) (\x -> happyReturn (happyOut15 x))
-
-pSoftConstraint tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 3# tks) (\x -> happyReturn (happyOut16 x))
-
-pGoal tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 4# tks) (\x -> happyReturn (happyOut17 x))
-
-happySeq = happyDontSeq
-
-
-returnM :: a -> Err a
-returnM = return
-
-thenM :: Err a -> (a -> Err b) -> Err b
-thenM = (>>=)
-
-happyError :: [Token] -> Err a
-happyError ts =
-  Bad (pp ts) $ "syntax error at " ++ tokenPos ts ++ 
-  case ts of
-    [] -> []
-    [Err _] -> " due to lexer error"
-    _ -> " before " ++ unwords (map (id . prToken) (take 4 ts))
-
-myLexer = tokens
-
-gp x@(PT (Pn _ l c) _) = Span (Pos (toInteger l) (toInteger c)) (Pos (toInteger l) (toInteger c + toInteger (length $ prToken x)))
-pp (PT (Pn _ l c) _ :_) = Pos (toInteger l) (toInteger c)
-pp (Err (Pn _ l c) :_) = Pos (toInteger l) (toInteger c)
-pp _ = error "EOF"
-
-mkCatSpan :: (Spannable c) => c -> Span
-mkCatSpan = getSpan
-
-mkTokenSpan :: Token -> Span
-mkTokenSpan = gp
-{-# LINE 1 "templates\GenericTemplate.hs" #-}
-{-# LINE 1 "templates\\GenericTemplate.hs" #-}
-{-# LINE 1 "<built-in>" #-}
-{-# LINE 1 "<command-line>" #-}
+happyIn10 :: (PosReal) -> (HappyAbsSyn )
+happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn10 #-}
+happyOut10 :: (HappyAbsSyn ) -> (PosReal)
+happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut10 #-}
+happyIn11 :: (PosString) -> (HappyAbsSyn )
+happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn11 #-}
+happyOut11 :: (HappyAbsSyn ) -> (PosString)
+happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut11 #-}
+happyIn12 :: (PosIdent) -> (HappyAbsSyn )
+happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn12 #-}
+happyOut12 :: (HappyAbsSyn ) -> (PosIdent)
+happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut12 #-}
+happyIn13 :: (Module) -> (HappyAbsSyn )
+happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn13 #-}
+happyOut13 :: (HappyAbsSyn ) -> (Module)
+happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut13 #-}
+happyIn14 :: (Declaration) -> (HappyAbsSyn )
+happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn14 #-}
+happyOut14 :: (HappyAbsSyn ) -> (Declaration)
+happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut14 #-}
+happyIn15 :: (Clafer) -> (HappyAbsSyn )
+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn15 #-}
+happyOut15 :: (HappyAbsSyn ) -> (Clafer)
+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut15 #-}
+happyIn16 :: (Constraint) -> (HappyAbsSyn )
+happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn16 #-}
+happyOut16 :: (HappyAbsSyn ) -> (Constraint)
+happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut16 #-}
+happyIn17 :: (Assertion) -> (HappyAbsSyn )
+happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn17 #-}
+happyOut17 :: (HappyAbsSyn ) -> (Assertion)
+happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut17 #-}
+happyIn18 :: (Goal) -> (HappyAbsSyn )
+happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn18 #-}
+happyOut18 :: (HappyAbsSyn ) -> (Goal)
+happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut18 #-}
+happyIn19 :: (Abstract) -> (HappyAbsSyn )
+happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn19 #-}
+happyOut19 :: (HappyAbsSyn ) -> (Abstract)
+happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut19 #-}
+happyIn20 :: (Elements) -> (HappyAbsSyn )
+happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn20 #-}
+happyOut20 :: (HappyAbsSyn ) -> (Elements)
+happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut20 #-}
+happyIn21 :: (Element) -> (HappyAbsSyn )
+happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn21 #-}
+happyOut21 :: (HappyAbsSyn ) -> (Element)
+happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut21 #-}
+happyIn22 :: (Super) -> (HappyAbsSyn )
+happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn22 #-}
+happyOut22 :: (HappyAbsSyn ) -> (Super)
+happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut22 #-}
+happyIn23 :: (Reference) -> (HappyAbsSyn )
+happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn23 #-}
+happyOut23 :: (HappyAbsSyn ) -> (Reference)
+happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut23 #-}
+happyIn24 :: (Init) -> (HappyAbsSyn )
+happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn24 #-}
+happyOut24 :: (HappyAbsSyn ) -> (Init)
+happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut24 #-}
+happyIn25 :: (InitHow) -> (HappyAbsSyn )
+happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn25 #-}
+happyOut25 :: (HappyAbsSyn ) -> (InitHow)
+happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut25 #-}
+happyIn26 :: (GCard) -> (HappyAbsSyn )
+happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn26 #-}
+happyOut26 :: (HappyAbsSyn ) -> (GCard)
+happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut26 #-}
+happyIn27 :: (Card) -> (HappyAbsSyn )
+happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn27 #-}
+happyOut27 :: (HappyAbsSyn ) -> (Card)
+happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut27 #-}
+happyIn28 :: (NCard) -> (HappyAbsSyn )
+happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn28 #-}
+happyOut28 :: (HappyAbsSyn ) -> (NCard)
+happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut28 #-}
+happyIn29 :: (ExInteger) -> (HappyAbsSyn )
+happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn29 #-}
+happyOut29 :: (HappyAbsSyn ) -> (ExInteger)
+happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut29 #-}
+happyIn30 :: (Name) -> (HappyAbsSyn )
+happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn30 #-}
+happyOut30 :: (HappyAbsSyn ) -> (Name)
+happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut30 #-}
+happyIn31 :: (Exp) -> (HappyAbsSyn )
+happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn31 #-}
+happyOut31 :: (HappyAbsSyn ) -> (Exp)
+happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut31 #-}
+happyIn32 :: (Exp) -> (HappyAbsSyn )
+happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn32 #-}
+happyOut32 :: (HappyAbsSyn ) -> (Exp)
+happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut32 #-}
+happyIn33 :: (Exp) -> (HappyAbsSyn )
+happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn33 #-}
+happyOut33 :: (HappyAbsSyn ) -> (Exp)
+happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut33 #-}
+happyIn34 :: (Exp) -> (HappyAbsSyn )
+happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn34 #-}
+happyOut34 :: (HappyAbsSyn ) -> (Exp)
+happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut34 #-}
+happyIn35 :: (Exp) -> (HappyAbsSyn )
+happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn35 #-}
+happyOut35 :: (HappyAbsSyn ) -> (Exp)
+happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut35 #-}
+happyIn36 :: (Exp) -> (HappyAbsSyn )
+happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn36 #-}
+happyOut36 :: (HappyAbsSyn ) -> (Exp)
+happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut36 #-}
+happyIn37 :: (Exp) -> (HappyAbsSyn )
+happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn37 #-}
+happyOut37 :: (HappyAbsSyn ) -> (Exp)
+happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut37 #-}
+happyIn38 :: (Exp) -> (HappyAbsSyn )
+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn38 #-}
+happyOut38 :: (HappyAbsSyn ) -> (Exp)
+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut38 #-}
+happyIn39 :: (Exp) -> (HappyAbsSyn )
+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn39 #-}
+happyOut39 :: (HappyAbsSyn ) -> (Exp)
+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut39 #-}
+happyIn40 :: (Exp) -> (HappyAbsSyn )
+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn40 #-}
+happyOut40 :: (HappyAbsSyn ) -> (Exp)
+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut40 #-}
+happyIn41 :: (Exp) -> (HappyAbsSyn )
+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn41 #-}
+happyOut41 :: (HappyAbsSyn ) -> (Exp)
+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut41 #-}
+happyIn42 :: (Exp) -> (HappyAbsSyn )
+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn42 #-}
+happyOut42 :: (HappyAbsSyn ) -> (Exp)
+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut42 #-}
+happyIn43 :: (Exp) -> (HappyAbsSyn )
+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn43 #-}
+happyOut43 :: (HappyAbsSyn ) -> (Exp)
+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut43 #-}
+happyIn44 :: (Exp) -> (HappyAbsSyn )
+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn44 #-}
+happyOut44 :: (HappyAbsSyn ) -> (Exp)
+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut44 #-}
+happyIn45 :: (Exp) -> (HappyAbsSyn )
+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn45 #-}
+happyOut45 :: (HappyAbsSyn ) -> (Exp)
+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut45 #-}
+happyIn46 :: (Exp) -> (HappyAbsSyn )
+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn46 #-}
+happyOut46 :: (HappyAbsSyn ) -> (Exp)
+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut46 #-}
+happyIn47 :: (Exp) -> (HappyAbsSyn )
+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn47 #-}
+happyOut47 :: (HappyAbsSyn ) -> (Exp)
+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut47 #-}
+happyIn48 :: (Exp) -> (HappyAbsSyn )
+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn48 #-}
+happyOut48 :: (HappyAbsSyn ) -> (Exp)
+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut48 #-}
+happyIn49 :: (Exp) -> (HappyAbsSyn )
+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn49 #-}
+happyOut49 :: (HappyAbsSyn ) -> (Exp)
+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut49 #-}
+happyIn50 :: (Exp) -> (HappyAbsSyn )
+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn50 #-}
+happyOut50 :: (HappyAbsSyn ) -> (Exp)
+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut50 #-}
+happyIn51 :: (Decl) -> (HappyAbsSyn )
+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn51 #-}
+happyOut51 :: (HappyAbsSyn ) -> (Decl)
+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut51 #-}
+happyIn52 :: (Quant) -> (HappyAbsSyn )
+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn52 #-}
+happyOut52 :: (HappyAbsSyn ) -> (Quant)
+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut52 #-}
+happyIn53 :: (EnumId) -> (HappyAbsSyn )
+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn53 #-}
+happyOut53 :: (HappyAbsSyn ) -> (EnumId)
+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut53 #-}
+happyIn54 :: (ModId) -> (HappyAbsSyn )
+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn54 #-}
+happyOut54 :: (HappyAbsSyn ) -> (ModId)
+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut54 #-}
+happyIn55 :: (LocId) -> (HappyAbsSyn )
+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn55 #-}
+happyOut55 :: (HappyAbsSyn ) -> (LocId)
+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut55 #-}
+happyIn56 :: ([Declaration]) -> (HappyAbsSyn )
+happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn56 #-}
+happyOut56 :: (HappyAbsSyn ) -> ([Declaration])
+happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut56 #-}
+happyIn57 :: ([EnumId]) -> (HappyAbsSyn )
+happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn57 #-}
+happyOut57 :: (HappyAbsSyn ) -> ([EnumId])
+happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut57 #-}
+happyIn58 :: ([Element]) -> (HappyAbsSyn )
+happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn58 #-}
+happyOut58 :: (HappyAbsSyn ) -> ([Element])
+happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut58 #-}
+happyIn59 :: ([Exp]) -> (HappyAbsSyn )
+happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn59 #-}
+happyOut59 :: (HappyAbsSyn ) -> ([Exp])
+happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut59 #-}
+happyIn60 :: ([LocId]) -> (HappyAbsSyn )
+happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn60 #-}
+happyOut60 :: (HappyAbsSyn ) -> ([LocId])
+happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut60 #-}
+happyIn61 :: ([ModId]) -> (HappyAbsSyn )
+happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn61 #-}
+happyOut61 :: (HappyAbsSyn ) -> ([ModId])
+happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut61 #-}
+happyInTok :: (Token) -> (HappyAbsSyn )
+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyInTok #-}
+happyOutTok :: (HappyAbsSyn ) -> (Token)
+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOutTok #-}
+
+
+happyActOffsets :: HappyAddr
+happyActOffsets = HappyA# "\x00\x00\x72\x01\x74\x01\x6d\x01\x7b\x01\x57\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\x70\x01\x4b\x01\x00\x00\x4b\x01\xaa\x00\x00\x00\x4b\x01\x21\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x01\x45\x01\x60\x01\x43\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x01\x51\x01\x31\x01\x32\x01\x68\x01\x00\x00\xff\xff\x00\x00\x08\x00\xda\x00\x00\x00\x00\x00\x53\x01\x54\x01\x3f\x00\x56\x01\x59\x01\x4a\x01\x00\x00\x31\x00\x1f\x01\x00\x00\xb0\x00\x29\x00\x77\x00\x29\x00\x00\x00\xde\xff\x29\x00\x00\x00\x93\x00\x93\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x2d\x01\xfe\xff\x21\x01\xfb\xff\x1a\x01\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x00\x00\x00\x00\x00\x00\x00\x39\x00\xb9\x00\x00\x00\x00\x00\x00\x00\xf6\x00\x29\x00\xf6\x00\xef\x00\x00\x00\xd4\x00\xf5\x00\xf7\x00\xc5\x00\x00\x00\x02\x01\x00\x00\xff\xff\xc3\x00\xfc\xff\x00\x00\xc7\x00\xc2\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xcc\x00\xcc\x00\xcc\x00\xcc\x00\xcc\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xca\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\xd9\x00\xb7\x00\xb4\x00\xea\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x00\xda\x00\x00\x00\x00\x00\x00\x00\xd8\x00\x0d\x00\xde\x00\xde\x00\xd1\x00\xc0\x00\x00\x00\xa9\x00\x77\x00\x00\x00\x00\x00\x9d\x00\xb9\x00\x8b\x00\x77\x00\x29\x00\xb8\x00\xfb\xff\xb9\x00\xb9\x00\x00\x00\x85\x00\x00\x00\x00\x00\x00\x00\x19\x01\x79\x00\x0d\x00\x0d\x00\xf4\xff\x99\x00\x00\x00\x00\x00\x9c\x00\x77\x00\x00\x00\x77\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x6c\x00\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x00\x00\x00"#
+
+happyGotoOffsets :: HappyAddr
+happyGotoOffsets = HappyA# "\x11\x00\x04\x00\x9a\x00\x98\x00\x86\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x00\x00\x00\x00\x5c\x00\x00\x00\x65\x00\x00\x00\x00\x00\x30\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x87\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x02\x4c\x00\x48\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x04\x00\x00\x00\x00\xc0\x03\xd4\x05\x19\x02\xbd\x05\x00\x00\x9f\x00\xa4\x05\x00\x00\xd5\x02\xa6\x02\x00\x00\x00\x00\x00\x00\x8d\x05\x00\x00\x74\x05\x00\x00\x00\x00\x00\x00\x00\x00\xea\x01\x00\x00\x5b\x00\x0c\x00\x00\x00\x5d\x00\x00\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x00\x00\x00\x00\x00\x00\x58\x00\xa5\x06\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x51\x00\xbe\x06\x8e\x06\x84\x06\x75\x06\x6d\x06\x54\x06\x1d\x06\x2d\x05\x14\x05\xfd\x04\xe4\x04\xcd\x04\x80\x04\x67\x04\x50\x04\x37\x04\x20\x04\x07\x04\xf0\x03\x00\x00\x91\x03\x62\x03\x33\x03\x04\x03\x77\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x01\x00\x00\x00\x00\x00\x00\x04\x06\x09\x00\x8c\x01\x44\x05\x00\x00\x14\x00\x3d\x06\x34\x06\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xff\x5e\x01\x20\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\xed\x05\x0f\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+happyDefActions :: HappyAddr
+happyDefActions = HappyA# "\x84\xff\xee\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfa\xff\x00\x00\x7e\xff\x00\x00\x00\x00\x00\x00\x7e\xff\x00\x00\xdc\xff\xed\xff\x00\x00\xee\xff\x83\xff\xea\xff\xe8\xff\xe6\xff\xe7\xff\xf3\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd7\xff\xd9\xff\xd8\xff\xda\xff\xdb\xff\x00\x00\x7e\xff\x00\x00\x92\xff\x91\xff\x90\xff\x8f\xff\x86\xff\x93\xff\x7d\xff\xc8\xff\xc4\xff\xc2\xff\xc0\xff\xbe\xff\xbc\xff\xba\xff\xb1\xff\xaf\xff\xac\xff\xa8\xff\xa3\xff\xa1\xff\x9f\xff\x9d\xff\x9a\xff\x98\xff\x96\xff\x94\xff\x00\x00\x7a\xff\xcd\xff\x00\x00\x00\x00\x00\x00\x00\x00\xef\xff\x00\x00\x00\x00\x8a\xff\x00\x00\x00\x00\x8c\xff\x8b\xff\x89\xff\x00\x00\x88\xff\x00\x00\xf9\xff\xf8\xff\xf7\xff\xf6\xff\x00\x00\xf1\xff\xe5\xff\x00\x00\x00\x00\xd6\xff\xd2\xff\xec\xff\xd1\xff\xd3\xff\xd4\xff\xd5\xff\x00\x00\xce\xff\xd0\xff\xcf\xff\xe3\xff\x00\x00\xf0\xff\xa7\xff\xa6\xff\xc6\xff\x00\x00\xc7\xff\x00\x00\x85\xff\x00\x00\x7c\xff\x00\x00\x00\x00\xa4\xff\x00\x00\xa5\xff\xbb\xff\x00\x00\x86\xff\xb0\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\xc5\xff\xc3\xff\xc1\xff\xbf\xff\xbd\xff\x00\x00\xb3\xff\xb5\xff\xb8\xff\xb7\xff\xb6\xff\xb9\xff\xb4\xff\xad\xff\xae\xff\xaa\xff\xab\xff\xa9\xff\xa0\xff\x9e\xff\x9b\xff\x9c\xff\x99\xff\x97\xff\x95\xff\x00\x00\x00\x00\x79\xff\x8e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\xff\xd6\xff\x00\x00\x00\x00\x87\xff\x82\xff\xf4\xff\xe9\xff\x80\xff\xee\xff\x00\x00\xe1\xff\xe2\xff\xe0\xff\x00\x00\xcb\xff\x7b\xff\x8d\xff\x00\x00\xc9\xff\x00\x00\xb2\xff\xca\xff\xcc\xff\x00\x00\xec\xff\x00\x00\xdd\xff\xde\xff\x81\xff\x7f\xff\xeb\xff\xdf\xff\xf2\xff\xa2\xff"#
+
+happyCheck :: HappyAddr
+happyCheck = HappyA# "\xff\xff\x02\x00\x01\x00\x08\x00\x03\x00\x0a\x00\x08\x00\x06\x00\x2a\x00\x15\x00\x32\x00\x07\x00\x00\x00\x04\x00\x0d\x00\x0b\x00\x14\x00\x1d\x00\x0a\x00\x17\x00\x00\x00\x0d\x00\x05\x00\x18\x00\x0b\x00\x0c\x00\x1b\x00\x0c\x00\x1d\x00\x22\x00\x1f\x00\x20\x00\x01\x00\x15\x00\x03\x00\x45\x00\x04\x00\x06\x00\x25\x00\x13\x00\x14\x00\x28\x00\x10\x00\x11\x00\x0d\x00\x2e\x00\x2d\x00\x06\x00\x2f\x00\x30\x00\x31\x00\x34\x00\x33\x00\x34\x00\x35\x00\x06\x00\x2f\x00\x38\x00\x39\x00\x3a\x00\x41\x00\x34\x00\x04\x00\x41\x00\x21\x00\x30\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x28\x00\x0f\x00\x10\x00\x0b\x00\x0c\x00\x2d\x00\x2d\x00\x2f\x00\x30\x00\x31\x00\x31\x00\x33\x00\x34\x00\x35\x00\x04\x00\x2d\x00\x38\x00\x39\x00\x3a\x00\x01\x00\x2a\x00\x03\x00\x00\x00\x2d\x00\x06\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x0d\x00\x0f\x00\x2e\x00\x0e\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x35\x00\x13\x00\x14\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x12\x00\x01\x00\x14\x00\x03\x00\x0c\x00\x2b\x00\x06\x00\x25\x00\x33\x00\x2f\x00\x28\x00\x04\x00\x04\x00\x0d\x00\x34\x00\x2d\x00\x04\x00\x2f\x00\x30\x00\x31\x00\x04\x00\x33\x00\x34\x00\x35\x00\x33\x00\x0a\x00\x38\x00\x39\x00\x3a\x00\x01\x00\x16\x00\x03\x00\x33\x00\x04\x00\x06\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x28\x00\x0d\x00\x09\x00\x08\x00\x04\x00\x2d\x00\x19\x00\x2f\x00\x30\x00\x31\x00\x3d\x00\x33\x00\x34\x00\x35\x00\x2e\x00\x2b\x00\x38\x00\x39\x00\x3a\x00\x2f\x00\x03\x00\x35\x00\x19\x00\x06\x00\x34\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x0d\x00\x45\x00\x06\x00\x2d\x00\x2d\x00\x2f\x00\x3e\x00\x2b\x00\x31\x00\x33\x00\x34\x00\x35\x00\x11\x00\x2b\x00\x38\x00\x39\x00\x3a\x00\x2f\x00\x03\x00\x45\x00\x11\x00\x06\x00\x34\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x0d\x00\x09\x00\x3e\x00\x32\x00\x2d\x00\x04\x00\x2f\x00\x36\x00\x37\x00\x08\x00\x33\x00\x34\x00\x35\x00\x3c\x00\x3e\x00\x38\x00\x39\x00\x3a\x00\x41\x00\x0e\x00\x13\x00\x16\x00\x05\x00\x3c\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x3f\x00\x1e\x00\x2e\x00\x2d\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x38\x00\x3e\x00\x3a\x00\x45\x00\x45\x00\x07\x00\x45\x00\x14\x00\x17\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x3e\x00\x45\x00\x1e\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\x3b\x00\x2c\x00\x12\x00\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x35\x00\x3d\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x23\x00\x0d\x00\x1d\x00\x26\x00\x27\x00\x14\x00\x29\x00\x24\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\x40\x00\x2c\x00\x11\x00\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x09\x00\x35\x00\x0e\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x16\x00\x0d\x00\x19\x00\x05\x00\x3c\x00\x1e\x00\x3f\x00\x1c\x00\x12\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\x45\x00\x2c\x00\x45\x00\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x46\x00\x35\x00\x23\x00\x46\x00\x1a\x00\x29\x00\x23\x00\x41\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\x16\x00\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\x16\x00\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\x16\x00\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\x16\x00\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\x00\xff\xff\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\x16\x00\x29\x00\xff\xff\xff\xff\x2c\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x46\x00\x35\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\x16\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\x16\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\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\xff\xff\x2c\x00\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x2c\x00\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x2c\x00\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x2c\x00\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x2c\x00\x16\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\xff\xff\xff\xff\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\x35\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\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\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x35\x00\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\x16\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x35\x00\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2a\x00\x35\x00\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\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\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\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"#
+
+happyTable :: HappyAddr
+happyTable = HappyA# "\x00\x00\x89\x00\x42\x00\x5f\x00\x43\x00\x60\x00\x65\x00\x44\x00\x73\x00\xd3\x00\xc0\x00\x0d\x00\x62\x00\x6e\x00\x45\x00\x0e\x00\x85\xff\xd4\x00\x87\x00\x85\xff\x5b\x00\x88\x00\x10\x00\x8a\x00\x80\x00\x81\x00\x8b\x00\xd8\x00\x8c\x00\x61\x00\x8d\x00\x8e\x00\x42\x00\x63\x00\x43\x00\x55\x00\xbb\x00\x44\x00\x68\x00\xc4\x00\x5d\x00\x47\x00\xd0\x00\xd1\x00\x45\x00\x8f\x00\x48\x00\x44\x00\x49\x00\x4a\x00\x4b\x00\x90\x00\x4c\x00\x4d\x00\x4e\x00\x44\x00\x70\x00\x4f\x00\x50\x00\x51\x00\x07\x00\xc7\x00\x28\x00\x07\x00\x46\x00\x11\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x47\x00\xba\x00\xbb\x00\x80\x00\x81\x00\x48\x00\xbc\x00\x49\x00\x4a\x00\x4b\x00\xd4\x00\x4c\x00\x4d\x00\x4e\x00\x6e\x00\x48\x00\x4f\x00\x50\x00\x51\x00\x42\x00\x7c\x00\x43\x00\x5b\x00\x48\x00\x44\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x1a\x00\x45\x00\xb8\x00\x3f\x00\x65\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\xb0\x00\x5c\x00\x5d\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x1b\x00\x42\x00\x1c\x00\x43\x00\xbe\x00\xae\x00\x44\x00\x57\x00\x55\x00\x70\x00\x47\x00\x57\x00\x28\x00\x45\x00\x71\x00\x48\x00\x6e\x00\x49\x00\x4a\x00\x4b\x00\x59\x00\x4c\x00\x4d\x00\x4e\x00\x21\x00\x07\x00\x4f\x00\x50\x00\x51\x00\x42\x00\x5a\x00\x43\x00\x23\x00\xbb\x00\x44\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x47\x00\x45\x00\x09\x00\x0b\x00\x6e\x00\x48\x00\x83\x00\x49\x00\x4a\x00\x4b\x00\xc0\x00\x4c\x00\x4d\x00\x4e\x00\x3f\x00\xb2\x00\x4f\x00\x50\x00\x51\x00\x70\x00\x43\x00\x40\x00\x83\x00\x44\x00\x71\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x45\x00\x55\x00\x44\x00\x48\x00\xbc\x00\x49\x00\xc2\x00\xd0\x00\xbd\x00\x4c\x00\x4d\x00\x4e\x00\x7d\x00\x6f\x00\x4f\x00\x50\x00\x51\x00\x70\x00\x43\x00\x55\x00\x7d\x00\x44\x00\x71\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x45\x00\x7e\x00\xca\x00\x1e\x00\x48\x00\x84\x00\x49\x00\x1f\x00\x20\x00\x85\x00\x4c\x00\x4d\x00\x4e\x00\x21\x00\xcc\x00\x4f\x00\x50\x00\x51\x00\x07\x00\x7f\x00\x86\x00\x82\x00\x91\x00\x92\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x93\x00\x94\x00\x9b\x00\x48\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x4f\x00\xb0\x00\x51\x00\x55\x00\x55\x00\xb2\x00\x55\x00\xb4\x00\xb5\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\xb6\x00\x55\x00\x94\x00\x29\x00\xd7\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\xb7\x00\x3e\x00\x59\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x09\x00\x40\x00\xc0\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0e\x00\x0d\x00\x17\x00\x62\x00\x19\x00\x10\x00\x67\x00\x0b\x00\x78\x00\x29\x00\xcd\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\xd7\x00\x3e\x00\x7d\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x7e\x00\x40\x00\x7f\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0e\x00\x82\x00\xd5\x00\x83\x00\x91\x00\x92\x00\x94\x00\x93\x00\x95\x00\x59\x00\x29\x00\xce\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\x55\x00\x3e\x00\x55\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\x40\x00\x23\x00\xff\xff\x09\x00\x0b\x00\x0d\x00\x07\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\xc6\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\xca\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x74\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x95\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x6a\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x6c\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x96\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x19\x00\x10\x00\x29\x00\x0b\x00\x00\x00\x00\x00\x1a\x00\x97\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xf5\xff\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x76\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\x00\x00\x6b\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\xcc\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x9b\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x9c\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x9d\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x9e\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x9f\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\xa0\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x78\x00\x40\x00\x00\x00\x00\x00\xa1\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x29\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x7a\x00\x00\x00\x00\x00\x3f\x00\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x40\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\xa3\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\xa5\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xa7\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\xc2\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\xc3\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x40\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xa8\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x29\x00\x00\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\xa9\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\xaa\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x40\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\xab\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x00\x3d\x00\x40\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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 = Happy_Data_Array.array (5, 134) [
+	(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),
+	(119 , happyReduce_119),
+	(120 , happyReduce_120),
+	(121 , happyReduce_121),
+	(122 , happyReduce_122),
+	(123 , happyReduce_123),
+	(124 , happyReduce_124),
+	(125 , happyReduce_125),
+	(126 , happyReduce_126),
+	(127 , happyReduce_127),
+	(128 , happyReduce_128),
+	(129 , happyReduce_129),
+	(130 , happyReduce_130),
+	(131 , happyReduce_131),
+	(132 , happyReduce_132),
+	(133 , happyReduce_133),
+	(134 , happyReduce_134)
+	]
+
+happy_n_terms = 71 :: Int
+happy_n_nonterms = 54 :: Int
+
+happyReduce_5 = happySpecReduce_1  0# happyReduction_5
+happyReduction_5 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn8
+		 (PosInteger (mkPosToken happy_var_1)
+	)}
+
+happyReduce_6 = happySpecReduce_1  1# happyReduction_6
+happyReduction_6 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn9
+		 (PosDouble (mkPosToken happy_var_1)
+	)}
+
+happyReduce_7 = happySpecReduce_1  2# happyReduction_7
+happyReduction_7 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn10
+		 (PosReal (mkPosToken happy_var_1)
+	)}
+
+happyReduce_8 = happySpecReduce_1  3# happyReduction_8
+happyReduction_8 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn11
+		 (PosString (mkPosToken happy_var_1)
+	)}
+
+happyReduce_9 = happySpecReduce_1  4# happyReduction_9
+happyReduction_9 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn12
+		 (PosIdent (mkPosToken happy_var_1)
+	)}
+
+happyReduce_10 = happySpecReduce_1  5# happyReduction_10
+happyReduction_10 happy_x_1
+	 =  case happyOut56 happy_x_1 of { happy_var_1 -> 
+	happyIn13
+		 (Module ((mkCatSpan happy_var_1)) (reverse happy_var_1)
+	)}
+
+happyReduce_11 = happyReduce 4# 6# happyReduction_11
+happyReduction_11 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { happy_var_1 -> 
+	case happyOut12 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { happy_var_3 -> 
+	case happyOut57 happy_x_4 of { happy_var_4 -> 
+	happyIn14
+		 (EnumDecl ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}}}
+
+happyReduce_12 = happySpecReduce_1  6# happyReduction_12
+happyReduction_12 happy_x_1
+	 =  case happyOut21 happy_x_1 of { happy_var_1 -> 
+	happyIn14
+		 (ElementDecl ((mkCatSpan happy_var_1)) happy_var_1
+	)}
+
+happyReduce_13 = happyReduce 8# 7# happyReduction_13
+happyReduction_13 (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 happyOut19 happy_x_1 of { happy_var_1 -> 
+	case happyOut26 happy_x_2 of { happy_var_2 -> 
+	case happyOut12 happy_x_3 of { happy_var_3 -> 
+	case happyOut22 happy_x_4 of { happy_var_4 -> 
+	case happyOut23 happy_x_5 of { happy_var_5 -> 
+	case happyOut27 happy_x_6 of { happy_var_6 -> 
+	case happyOut24 happy_x_7 of { happy_var_7 -> 
+	case happyOut20 happy_x_8 of { happy_var_8 -> 
+	happyIn15
+		 (Clafer ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkCatSpan happy_var_4) >- (mkCatSpan happy_var_5) >- (mkCatSpan happy_var_6) >- (mkCatSpan happy_var_7) >- (mkCatSpan happy_var_8)) happy_var_1 happy_var_2 happy_var_3 happy_var_4 happy_var_5 happy_var_6 happy_var_7 happy_var_8
+	) `HappyStk` happyRest}}}}}}}}
+
+happyReduce_14 = happySpecReduce_3  8# happyReduction_14
+happyReduction_14 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	case happyOut59 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { happy_var_3 -> 
+	happyIn16
+		 (Constraint ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3)) (reverse happy_var_2)
+	)}}}
+
+happyReduce_15 = happyReduce 4# 9# happyReduction_15
+happyReduction_15 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut59 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { happy_var_4 -> 
+	happyIn17
+		 (Assertion ((mkTokenSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkTokenSpan happy_var_4)) (reverse happy_var_3)
+	) `HappyStk` happyRest}}}}
+
+happyReduce_16 = happySpecReduce_3  10# happyReduction_16
+happyReduction_16 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	case happyOut59 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { happy_var_3 -> 
+	happyIn18
+		 (Goal ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3)) (reverse happy_var_2)
+	)}}}
+
+happyReduce_17 = happySpecReduce_0  11# happyReduction_17
+happyReduction_17  =  happyIn19
+		 (AbstractEmpty noSpan
+	)
+
+happyReduce_18 = happySpecReduce_1  11# happyReduction_18
+happyReduction_18 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn19
+		 (Abstract ((mkTokenSpan happy_var_1))
+	)}
+
+happyReduce_19 = happySpecReduce_0  12# happyReduction_19
+happyReduction_19  =  happyIn20
+		 (ElementsEmpty noSpan
+	)
+
+happyReduce_20 = happySpecReduce_3  12# happyReduction_20
+happyReduction_20 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	case happyOut58 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { happy_var_3 -> 
+	happyIn20
+		 (ElementsList ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3)) (reverse happy_var_2)
+	)}}}
+
+happyReduce_21 = happySpecReduce_1  13# happyReduction_21
+happyReduction_21 happy_x_1
+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
+	happyIn21
+		 (Subclafer ((mkCatSpan happy_var_1)) happy_var_1
+	)}
+
+happyReduce_22 = happyReduce 4# 13# happyReduction_22
+happyReduction_22 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { happy_var_1 -> 
+	case happyOut30 happy_x_2 of { happy_var_2 -> 
+	case happyOut27 happy_x_3 of { happy_var_3 -> 
+	case happyOut20 happy_x_4 of { happy_var_4 -> 
+	happyIn21
+		 (ClaferUse ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_2 happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}}}
+
+happyReduce_23 = happySpecReduce_1  13# happyReduction_23
+happyReduction_23 happy_x_1
+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
+	happyIn21
+		 (Subconstraint ((mkCatSpan happy_var_1)) happy_var_1
+	)}
+
+happyReduce_24 = happySpecReduce_1  13# happyReduction_24
+happyReduction_24 happy_x_1
+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> 
+	happyIn21
+		 (Subgoal ((mkCatSpan happy_var_1)) happy_var_1
+	)}
+
+happyReduce_25 = happySpecReduce_1  13# happyReduction_25
+happyReduction_25 happy_x_1
+	 =  case happyOut17 happy_x_1 of { happy_var_1 -> 
+	happyIn21
+		 (SubAssertion ((mkCatSpan happy_var_1)) happy_var_1
+	)}
+
+happyReduce_26 = happySpecReduce_0  14# happyReduction_26
+happyReduction_26  =  happyIn22
+		 (SuperEmpty noSpan
+	)
+
+happyReduce_27 = happySpecReduce_2  14# happyReduction_27
+happyReduction_27 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	case happyOut49 happy_x_2 of { happy_var_2 -> 
+	happyIn22
+		 (SuperSome ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
+	)}}
+
+happyReduce_28 = happySpecReduce_0  15# happyReduction_28
+happyReduction_28  =  happyIn23
+		 (ReferenceEmpty noSpan
+	)
+
+happyReduce_29 = happySpecReduce_2  15# happyReduction_29
+happyReduction_29 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	case happyOut46 happy_x_2 of { happy_var_2 -> 
+	happyIn23
+		 (ReferenceSet ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
+	)}}
+
+happyReduce_30 = happySpecReduce_2  15# happyReduction_30
+happyReduction_30 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	case happyOut46 happy_x_2 of { happy_var_2 -> 
+	happyIn23
+		 (ReferenceBag ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
+	)}}
+
+happyReduce_31 = happySpecReduce_0  16# happyReduction_31
+happyReduction_31  =  happyIn24
+		 (InitEmpty noSpan
+	)
+
+happyReduce_32 = happySpecReduce_2  16# happyReduction_32
+happyReduction_32 happy_x_2
+	happy_x_1
+	 =  case happyOut25 happy_x_1 of { happy_var_1 -> 
+	case happyOut31 happy_x_2 of { happy_var_2 -> 
+	happyIn24
+		 (InitSome ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_1 happy_var_2
+	)}}
+
+happyReduce_33 = happySpecReduce_1  17# happyReduction_33
+happyReduction_33 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn25
+		 (InitConstant ((mkTokenSpan happy_var_1))
+	)}
+
+happyReduce_34 = happySpecReduce_1  17# happyReduction_34
+happyReduction_34 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn25
+		 (InitDefault ((mkTokenSpan happy_var_1))
+	)}
+
+happyReduce_35 = happySpecReduce_0  18# happyReduction_35
+happyReduction_35  =  happyIn26
+		 (GCardEmpty noSpan
+	)
+
+happyReduce_36 = happySpecReduce_1  18# happyReduction_36
+happyReduction_36 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn26
+		 (GCardXor ((mkTokenSpan happy_var_1))
+	)}
+
+happyReduce_37 = happySpecReduce_1  18# happyReduction_37
+happyReduction_37 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn26
+		 (GCardOr ((mkTokenSpan happy_var_1))
+	)}
+
+happyReduce_38 = happySpecReduce_1  18# happyReduction_38
+happyReduction_38 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn26
+		 (GCardMux ((mkTokenSpan happy_var_1))
+	)}
+
+happyReduce_39 = happySpecReduce_1  18# happyReduction_39
+happyReduction_39 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn26
+		 (GCardOpt ((mkTokenSpan happy_var_1))
+	)}
+
+happyReduce_40 = happySpecReduce_1  18# happyReduction_40
+happyReduction_40 happy_x_1
+	 =  case happyOut28 happy_x_1 of { happy_var_1 -> 
+	happyIn26
+		 (GCardInterval ((mkCatSpan happy_var_1)) happy_var_1
+	)}
+
+happyReduce_41 = happySpecReduce_0  19# happyReduction_41
+happyReduction_41  =  happyIn27
+		 (CardEmpty noSpan
+	)
+
+happyReduce_42 = happySpecReduce_1  19# happyReduction_42
+happyReduction_42 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn27
+		 (CardLone ((mkTokenSpan happy_var_1))
+	)}
+
+happyReduce_43 = happySpecReduce_1  19# happyReduction_43
+happyReduction_43 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn27
+		 (CardSome ((mkTokenSpan happy_var_1))
+	)}
+
+happyReduce_44 = happySpecReduce_1  19# happyReduction_44
+happyReduction_44 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn27
+		 (CardAny ((mkTokenSpan happy_var_1))
+	)}
+
+happyReduce_45 = happySpecReduce_1  19# happyReduction_45
+happyReduction_45 happy_x_1
+	 =  case happyOut8 happy_x_1 of { happy_var_1 -> 
+	happyIn27
+		 (CardNum ((mkCatSpan happy_var_1)) happy_var_1
+	)}
+
+happyReduce_46 = happySpecReduce_1  19# happyReduction_46
+happyReduction_46 happy_x_1
+	 =  case happyOut28 happy_x_1 of { happy_var_1 -> 
+	happyIn27
+		 (CardInterval ((mkCatSpan happy_var_1)) happy_var_1
+	)}
+
+happyReduce_47 = happySpecReduce_3  20# happyReduction_47
+happyReduction_47 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut8 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut29 happy_x_3 of { happy_var_3 -> 
+	happyIn28
+		 (NCard ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_48 = happySpecReduce_1  21# happyReduction_48
+happyReduction_48 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn29
+		 (ExIntegerAst ((mkTokenSpan happy_var_1))
+	)}
+
+happyReduce_49 = happySpecReduce_1  21# happyReduction_49
+happyReduction_49 happy_x_1
+	 =  case happyOut8 happy_x_1 of { happy_var_1 -> 
+	happyIn29
+		 (ExIntegerNum ((mkCatSpan happy_var_1)) happy_var_1
+	)}
+
+happyReduce_50 = happySpecReduce_1  22# happyReduction_50
+happyReduction_50 happy_x_1
+	 =  case happyOut61 happy_x_1 of { happy_var_1 -> 
+	happyIn30
+		 (Path ((mkCatSpan happy_var_1)) happy_var_1
+	)}
+
+happyReduce_51 = happyReduce 5# 23# happyReduction_51
+happyReduction_51 (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 { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut51 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { happy_var_4 -> 
+	case happyOut31 happy_x_5 of { happy_var_5 -> 
+	happyIn31
+		 (EDeclAllDisj ((mkTokenSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkTokenSpan happy_var_4) >- (mkCatSpan happy_var_5)) happy_var_3 happy_var_5
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_52 = happyReduce 4# 23# happyReduction_52
+happyReduction_52 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { happy_var_1 -> 
+	case happyOut51 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { happy_var_3 -> 
+	case happyOut31 happy_x_4 of { happy_var_4 -> 
+	happyIn31
+		 (EDeclAll ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}}}
+
+happyReduce_53 = happyReduce 5# 23# happyReduction_53
+happyReduction_53 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut52 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut51 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { happy_var_4 -> 
+	case happyOut31 happy_x_5 of { happy_var_5 -> 
+	happyIn31
+		 (EDeclQuantDisj ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkTokenSpan happy_var_4) >- (mkCatSpan happy_var_5)) happy_var_1 happy_var_3 happy_var_5
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_54 = happyReduce 4# 23# happyReduction_54
+happyReduction_54 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut52 happy_x_1 of { happy_var_1 -> 
+	case happyOut51 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { happy_var_3 -> 
+	case happyOut31 happy_x_4 of { happy_var_4 -> 
+	happyIn31
+		 (EDeclQuant ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_1 happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}}}
+
+happyReduce_55 = happySpecReduce_1  23# happyReduction_55
+happyReduction_55 happy_x_1
+	 =  case happyOut32 happy_x_1 of { happy_var_1 -> 
+	happyIn31
+		 (happy_var_1
+	)}
+
+happyReduce_56 = happySpecReduce_2  24# happyReduction_56
+happyReduction_56 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	case happyOut33 happy_x_2 of { happy_var_2 -> 
+	happyIn32
+		 (EGMax ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
+	)}}
+
+happyReduce_57 = happySpecReduce_2  24# happyReduction_57
+happyReduction_57 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	case happyOut33 happy_x_2 of { happy_var_2 -> 
+	happyIn32
+		 (EGMin ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
+	)}}
+
+happyReduce_58 = happySpecReduce_3  24# happyReduction_58
+happyReduction_58 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut32 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut33 happy_x_3 of { happy_var_3 -> 
+	happyIn32
+		 (EIff ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_59 = happySpecReduce_1  24# happyReduction_59
+happyReduction_59 happy_x_1
+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> 
+	happyIn32
+		 (happy_var_1
+	)}
+
+happyReduce_60 = happySpecReduce_3  25# happyReduction_60
+happyReduction_60 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut34 happy_x_3 of { happy_var_3 -> 
+	happyIn33
+		 (EImplies ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_61 = happySpecReduce_1  25# happyReduction_61
+happyReduction_61 happy_x_1
+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> 
+	happyIn33
+		 (happy_var_1
+	)}
+
+happyReduce_62 = happySpecReduce_3  26# happyReduction_62
+happyReduction_62 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut35 happy_x_3 of { happy_var_3 -> 
+	happyIn34
+		 (EOr ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_63 = happySpecReduce_1  26# happyReduction_63
+happyReduction_63 happy_x_1
+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> 
+	happyIn34
+		 (happy_var_1
+	)}
+
+happyReduce_64 = happySpecReduce_3  27# happyReduction_64
+happyReduction_64 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut36 happy_x_3 of { happy_var_3 -> 
+	happyIn35
+		 (EXor ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_65 = happySpecReduce_1  27# happyReduction_65
+happyReduction_65 happy_x_1
+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> 
+	happyIn35
+		 (happy_var_1
+	)}
+
+happyReduce_66 = happySpecReduce_3  28# happyReduction_66
+happyReduction_66 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut37 happy_x_3 of { happy_var_3 -> 
+	happyIn36
+		 (EAnd ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_67 = happySpecReduce_1  28# happyReduction_67
+happyReduction_67 happy_x_1
+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
+	happyIn36
+		 (happy_var_1
+	)}
+
+happyReduce_68 = happySpecReduce_2  29# happyReduction_68
+happyReduction_68 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	case happyOut38 happy_x_2 of { happy_var_2 -> 
+	happyIn37
+		 (ENeg ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
+	)}}
+
+happyReduce_69 = happySpecReduce_1  29# happyReduction_69
+happyReduction_69 happy_x_1
+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
+	happyIn37
+		 (happy_var_1
+	)}
+
+happyReduce_70 = happySpecReduce_3  30# happyReduction_70
+happyReduction_70 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	happyIn38
+		 (ELt ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_71 = happySpecReduce_3  30# happyReduction_71
+happyReduction_71 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	happyIn38
+		 (EGt ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_72 = happySpecReduce_3  30# happyReduction_72
+happyReduction_72 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	happyIn38
+		 (EEq ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_73 = happySpecReduce_3  30# happyReduction_73
+happyReduction_73 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	happyIn38
+		 (ELte ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_74 = happySpecReduce_3  30# happyReduction_74
+happyReduction_74 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	happyIn38
+		 (EGte ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_75 = happySpecReduce_3  30# happyReduction_75
+happyReduction_75 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	happyIn38
+		 (ENeq ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_76 = happySpecReduce_3  30# happyReduction_76
+happyReduction_76 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	happyIn38
+		 (EIn ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_77 = happyReduce 4# 30# happyReduction_77
+happyReduction_77 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut38 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { happy_var_3 -> 
+	case happyOut39 happy_x_4 of { happy_var_4 -> 
+	happyIn38
+		 (ENin ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_1 happy_var_4
+	) `HappyStk` happyRest}}}}
+
+happyReduce_78 = happySpecReduce_1  30# happyReduction_78
+happyReduction_78 happy_x_1
+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
+	happyIn38
+		 (happy_var_1
+	)}
+
+happyReduce_79 = happySpecReduce_2  31# happyReduction_79
+happyReduction_79 happy_x_2
+	happy_x_1
+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> 
+	case happyOut43 happy_x_2 of { happy_var_2 -> 
+	happyIn39
+		 (EQuantExp ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_1 happy_var_2
+	)}}
+
+happyReduce_80 = happySpecReduce_1  31# happyReduction_80
+happyReduction_80 happy_x_1
+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
+	happyIn39
+		 (happy_var_1
+	)}
+
+happyReduce_81 = happySpecReduce_3  32# happyReduction_81
+happyReduction_81 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut41 happy_x_3 of { happy_var_3 -> 
+	happyIn40
+		 (EAdd ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_82 = happySpecReduce_3  32# happyReduction_82
+happyReduction_82 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut41 happy_x_3 of { happy_var_3 -> 
+	happyIn40
+		 (ESub ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_83 = happySpecReduce_1  32# happyReduction_83
+happyReduction_83 happy_x_1
+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> 
+	happyIn40
+		 (happy_var_1
+	)}
+
+happyReduce_84 = happySpecReduce_3  33# happyReduction_84
+happyReduction_84 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut42 happy_x_3 of { happy_var_3 -> 
+	happyIn41
+		 (EMul ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_85 = happySpecReduce_3  33# happyReduction_85
+happyReduction_85 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut42 happy_x_3 of { happy_var_3 -> 
+	happyIn41
+		 (EDiv ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_86 = happySpecReduce_3  33# happyReduction_86
+happyReduction_86 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut42 happy_x_3 of { happy_var_3 -> 
+	happyIn41
+		 (ERem ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_87 = happySpecReduce_1  33# happyReduction_87
+happyReduction_87 happy_x_1
+	 =  case happyOut42 happy_x_1 of { happy_var_1 -> 
+	happyIn41
+		 (happy_var_1
+	)}
+
+happyReduce_88 = happySpecReduce_2  34# happyReduction_88
+happyReduction_88 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	case happyOut43 happy_x_2 of { happy_var_2 -> 
+	happyIn42
+		 (ESum ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
+	)}}
+
+happyReduce_89 = happySpecReduce_2  34# happyReduction_89
+happyReduction_89 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	case happyOut43 happy_x_2 of { happy_var_2 -> 
+	happyIn42
+		 (EProd ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
+	)}}
+
+happyReduce_90 = happySpecReduce_2  34# happyReduction_90
+happyReduction_90 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	case happyOut43 happy_x_2 of { happy_var_2 -> 
+	happyIn42
+		 (ECard ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
+	)}}
+
+happyReduce_91 = happySpecReduce_2  34# happyReduction_91
+happyReduction_91 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	case happyOut43 happy_x_2 of { happy_var_2 -> 
+	happyIn42
+		 (EMinExp ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2
+	)}}
+
+happyReduce_92 = happySpecReduce_1  34# happyReduction_92
+happyReduction_92 happy_x_1
+	 =  case happyOut43 happy_x_1 of { happy_var_1 -> 
+	happyIn42
+		 (happy_var_1
+	)}
+
+happyReduce_93 = happyReduce 6# 35# 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 happyOutTok happy_x_1 of { happy_var_1 -> 
+	case happyOut43 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { happy_var_3 -> 
+	case happyOut43 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { happy_var_5 -> 
+	case happyOut44 happy_x_6 of { happy_var_6 -> 
+	happyIn43
+		 (EImpliesElse ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4) >- (mkTokenSpan happy_var_5) >- (mkCatSpan happy_var_6)) happy_var_2 happy_var_4 happy_var_6
+	) `HappyStk` happyRest}}}}}}
+
+happyReduce_94 = happySpecReduce_1  35# happyReduction_94
+happyReduction_94 happy_x_1
+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> 
+	happyIn43
+		 (happy_var_1
+	)}
+
+happyReduce_95 = happySpecReduce_3  36# happyReduction_95
+happyReduction_95 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut45 happy_x_3 of { happy_var_3 -> 
+	happyIn44
+		 (EDomain ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_96 = happySpecReduce_1  36# happyReduction_96
+happyReduction_96 happy_x_1
+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
+	happyIn44
+		 (happy_var_1
+	)}
+
+happyReduce_97 = happySpecReduce_3  37# happyReduction_97
+happyReduction_97 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut46 happy_x_3 of { happy_var_3 -> 
+	happyIn45
+		 (ERange ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_98 = happySpecReduce_1  37# happyReduction_98
+happyReduction_98 happy_x_1
+	 =  case happyOut46 happy_x_1 of { happy_var_1 -> 
+	happyIn45
+		 (happy_var_1
+	)}
+
+happyReduce_99 = happySpecReduce_3  38# happyReduction_99
+happyReduction_99 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut46 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut47 happy_x_3 of { happy_var_3 -> 
+	happyIn46
+		 (EUnion ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_100 = happySpecReduce_3  38# happyReduction_100
+happyReduction_100 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut46 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut47 happy_x_3 of { happy_var_3 -> 
+	happyIn46
+		 (EUnionCom ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_101 = happySpecReduce_1  38# happyReduction_101
+happyReduction_101 happy_x_1
+	 =  case happyOut47 happy_x_1 of { happy_var_1 -> 
+	happyIn46
+		 (happy_var_1
+	)}
+
+happyReduce_102 = happySpecReduce_3  39# happyReduction_102
+happyReduction_102 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut47 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut48 happy_x_3 of { happy_var_3 -> 
+	happyIn47
+		 (EDifference ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_103 = happySpecReduce_1  39# happyReduction_103
+happyReduction_103 happy_x_1
+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> 
+	happyIn47
+		 (happy_var_1
+	)}
+
+happyReduce_104 = happySpecReduce_3  40# happyReduction_104
+happyReduction_104 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut49 happy_x_3 of { happy_var_3 -> 
+	happyIn48
+		 (EIntersection ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_105 = happySpecReduce_1  40# happyReduction_105
+happyReduction_105 happy_x_1
+	 =  case happyOut49 happy_x_1 of { happy_var_1 -> 
+	happyIn48
+		 (happy_var_1
+	)}
+
+happyReduce_106 = happySpecReduce_3  41# happyReduction_106
+happyReduction_106 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut49 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut50 happy_x_3 of { happy_var_3 -> 
+	happyIn49
+		 (EJoin ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_107 = happySpecReduce_1  41# happyReduction_107
+happyReduction_107 happy_x_1
+	 =  case happyOut50 happy_x_1 of { happy_var_1 -> 
+	happyIn49
+		 (happy_var_1
+	)}
+
+happyReduce_108 = happySpecReduce_1  42# happyReduction_108
+happyReduction_108 happy_x_1
+	 =  case happyOut30 happy_x_1 of { happy_var_1 -> 
+	happyIn50
+		 (ClaferId ((mkCatSpan happy_var_1)) happy_var_1
+	)}
+
+happyReduce_109 = happySpecReduce_1  42# happyReduction_109
+happyReduction_109 happy_x_1
+	 =  case happyOut8 happy_x_1 of { happy_var_1 -> 
+	happyIn50
+		 (EInt ((mkCatSpan happy_var_1)) happy_var_1
+	)}
+
+happyReduce_110 = happySpecReduce_1  42# happyReduction_110
+happyReduction_110 happy_x_1
+	 =  case happyOut9 happy_x_1 of { happy_var_1 -> 
+	happyIn50
+		 (EDouble ((mkCatSpan happy_var_1)) happy_var_1
+	)}
+
+happyReduce_111 = happySpecReduce_1  42# happyReduction_111
+happyReduction_111 happy_x_1
+	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
+	happyIn50
+		 (EReal ((mkCatSpan happy_var_1)) happy_var_1
+	)}
+
+happyReduce_112 = happySpecReduce_1  42# happyReduction_112
+happyReduction_112 happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	happyIn50
+		 (EStr ((mkCatSpan happy_var_1)) happy_var_1
+	)}
+
+happyReduce_113 = happySpecReduce_3  42# happyReduction_113
+happyReduction_113 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut31 happy_x_2 of { happy_var_2 -> 
+	happyIn50
+		 (happy_var_2
+	)}
+
+happyReduce_114 = happySpecReduce_3  43# happyReduction_114
+happyReduction_114 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut60 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { happy_var_2 -> 
+	case happyOut44 happy_x_3 of { happy_var_3 -> 
+	happyIn51
+		 (Decl ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_115 = happySpecReduce_1  44# happyReduction_115
+happyReduction_115 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn52
+		 (QuantNo ((mkTokenSpan happy_var_1))
+	)}
+
+happyReduce_116 = happySpecReduce_1  44# happyReduction_116
+happyReduction_116 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn52
+		 (QuantNot ((mkTokenSpan happy_var_1))
+	)}
+
+happyReduce_117 = happySpecReduce_1  44# happyReduction_117
+happyReduction_117 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn52
+		 (QuantLone ((mkTokenSpan happy_var_1))
+	)}
+
+happyReduce_118 = happySpecReduce_1  44# happyReduction_118
+happyReduction_118 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn52
+		 (QuantOne ((mkTokenSpan happy_var_1))
+	)}
+
+happyReduce_119 = happySpecReduce_1  44# happyReduction_119
+happyReduction_119 happy_x_1
+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> 
+	happyIn52
+		 (QuantSome ((mkTokenSpan happy_var_1))
+	)}
+
+happyReduce_120 = happySpecReduce_1  45# happyReduction_120
+happyReduction_120 happy_x_1
+	 =  case happyOut12 happy_x_1 of { happy_var_1 -> 
+	happyIn53
+		 (EnumIdIdent ((mkCatSpan happy_var_1)) happy_var_1
+	)}
+
+happyReduce_121 = happySpecReduce_1  46# happyReduction_121
+happyReduction_121 happy_x_1
+	 =  case happyOut12 happy_x_1 of { happy_var_1 -> 
+	happyIn54
+		 (ModIdIdent ((mkCatSpan happy_var_1)) happy_var_1
+	)}
+
+happyReduce_122 = happySpecReduce_1  47# happyReduction_122
+happyReduction_122 happy_x_1
+	 =  case happyOut12 happy_x_1 of { happy_var_1 -> 
+	happyIn55
+		 (LocIdIdent ((mkCatSpan happy_var_1)) happy_var_1
+	)}
+
+happyReduce_123 = happySpecReduce_0  48# happyReduction_123
+happyReduction_123  =  happyIn56
+		 ([]
+	)
+
+happyReduce_124 = happySpecReduce_2  48# happyReduction_124
+happyReduction_124 happy_x_2
+	happy_x_1
+	 =  case happyOut56 happy_x_1 of { happy_var_1 -> 
+	case happyOut14 happy_x_2 of { happy_var_2 -> 
+	happyIn56
+		 (flip (:)  happy_var_1 happy_var_2
+	)}}
+
+happyReduce_125 = happySpecReduce_1  49# happyReduction_125
+happyReduction_125 happy_x_1
+	 =  case happyOut53 happy_x_1 of { happy_var_1 -> 
+	happyIn57
+		 ((:[])  happy_var_1
+	)}
+
+happyReduce_126 = happySpecReduce_3  49# happyReduction_126
+happyReduction_126 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut53 happy_x_1 of { happy_var_1 -> 
+	case happyOut57 happy_x_3 of { happy_var_3 -> 
+	happyIn57
+		 ((:)  happy_var_1 happy_var_3
+	)}}
+
+happyReduce_127 = happySpecReduce_0  50# happyReduction_127
+happyReduction_127  =  happyIn58
+		 ([]
+	)
+
+happyReduce_128 = happySpecReduce_2  50# happyReduction_128
+happyReduction_128 happy_x_2
+	happy_x_1
+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> 
+	case happyOut21 happy_x_2 of { happy_var_2 -> 
+	happyIn58
+		 (flip (:)  happy_var_1 happy_var_2
+	)}}
+
+happyReduce_129 = happySpecReduce_0  51# happyReduction_129
+happyReduction_129  =  happyIn59
+		 ([]
+	)
+
+happyReduce_130 = happySpecReduce_2  51# happyReduction_130
+happyReduction_130 happy_x_2
+	happy_x_1
+	 =  case happyOut59 happy_x_1 of { happy_var_1 -> 
+	case happyOut31 happy_x_2 of { happy_var_2 -> 
+	happyIn59
+		 (flip (:)  happy_var_1 happy_var_2
+	)}}
+
+happyReduce_131 = happySpecReduce_1  52# happyReduction_131
+happyReduction_131 happy_x_1
+	 =  case happyOut55 happy_x_1 of { happy_var_1 -> 
+	happyIn60
+		 ((:[])  happy_var_1
+	)}
+
+happyReduce_132 = happySpecReduce_3  52# happyReduction_132
+happyReduction_132 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut55 happy_x_1 of { happy_var_1 -> 
+	case happyOut60 happy_x_3 of { happy_var_3 -> 
+	happyIn60
+		 ((:)  happy_var_1 happy_var_3
+	)}}
+
+happyReduce_133 = happySpecReduce_1  53# happyReduction_133
+happyReduction_133 happy_x_1
+	 =  case happyOut54 happy_x_1 of { happy_var_1 -> 
+	happyIn61
+		 ((:[])  happy_var_1
+	)}
+
+happyReduce_134 = happySpecReduce_3  53# happyReduction_134
+happyReduction_134 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut54 happy_x_1 of { happy_var_1 -> 
+	case happyOut61 happy_x_3 of { happy_var_3 -> 
+	happyIn61
+		 ((:)  happy_var_1 happy_var_3
+	)}}
+
+happyNewToken action sts stk [] =
+	happyDoAction 70# notHappyAtAll action sts stk []
+
+happyNewToken action sts stk (tk:tks) =
+	let cont i = happyDoAction i tk action sts stk tks in
+	case tk of {
+	PT _ (TS _ 1) -> cont 1#;
+	PT _ (TS _ 2) -> cont 2#;
+	PT _ (TS _ 3) -> cont 3#;
+	PT _ (TS _ 4) -> cont 4#;
+	PT _ (TS _ 5) -> cont 5#;
+	PT _ (TS _ 6) -> cont 6#;
+	PT _ (TS _ 7) -> cont 7#;
+	PT _ (TS _ 8) -> cont 8#;
+	PT _ (TS _ 9) -> cont 9#;
+	PT _ (TS _ 10) -> cont 10#;
+	PT _ (TS _ 11) -> cont 11#;
+	PT _ (TS _ 12) -> cont 12#;
+	PT _ (TS _ 13) -> cont 13#;
+	PT _ (TS _ 14) -> cont 14#;
+	PT _ (TS _ 15) -> cont 15#;
+	PT _ (TS _ 16) -> cont 16#;
+	PT _ (TS _ 17) -> cont 17#;
+	PT _ (TS _ 18) -> cont 18#;
+	PT _ (TS _ 19) -> cont 19#;
+	PT _ (TS _ 20) -> cont 20#;
+	PT _ (TS _ 21) -> cont 21#;
+	PT _ (TS _ 22) -> cont 22#;
+	PT _ (TS _ 23) -> cont 23#;
+	PT _ (TS _ 24) -> cont 24#;
+	PT _ (TS _ 25) -> cont 25#;
+	PT _ (TS _ 26) -> cont 26#;
+	PT _ (TS _ 27) -> cont 27#;
+	PT _ (TS _ 28) -> cont 28#;
+	PT _ (TS _ 29) -> cont 29#;
+	PT _ (TS _ 30) -> cont 30#;
+	PT _ (TS _ 31) -> cont 31#;
+	PT _ (TS _ 32) -> cont 32#;
+	PT _ (TS _ 33) -> cont 33#;
+	PT _ (TS _ 34) -> cont 34#;
+	PT _ (TS _ 35) -> cont 35#;
+	PT _ (TS _ 36) -> cont 36#;
+	PT _ (TS _ 37) -> cont 37#;
+	PT _ (TS _ 38) -> cont 38#;
+	PT _ (TS _ 39) -> cont 39#;
+	PT _ (TS _ 40) -> cont 40#;
+	PT _ (TS _ 41) -> cont 41#;
+	PT _ (TS _ 42) -> cont 42#;
+	PT _ (TS _ 43) -> cont 43#;
+	PT _ (TS _ 44) -> cont 44#;
+	PT _ (TS _ 45) -> cont 45#;
+	PT _ (TS _ 46) -> cont 46#;
+	PT _ (TS _ 47) -> cont 47#;
+	PT _ (TS _ 48) -> cont 48#;
+	PT _ (TS _ 49) -> cont 49#;
+	PT _ (TS _ 50) -> cont 50#;
+	PT _ (TS _ 51) -> cont 51#;
+	PT _ (TS _ 52) -> cont 52#;
+	PT _ (TS _ 53) -> cont 53#;
+	PT _ (TS _ 54) -> cont 54#;
+	PT _ (TS _ 55) -> cont 55#;
+	PT _ (TS _ 56) -> cont 56#;
+	PT _ (TS _ 57) -> cont 57#;
+	PT _ (TS _ 58) -> cont 58#;
+	PT _ (TS _ 59) -> cont 59#;
+	PT _ (TS _ 60) -> cont 60#;
+	PT _ (TS _ 61) -> cont 61#;
+	PT _ (TS _ 62) -> cont 62#;
+	PT _ (TS _ 63) -> cont 63#;
+	PT _ (TS _ 64) -> cont 64#;
+	PT _ (T_PosInteger _) -> cont 65#;
+	PT _ (T_PosDouble _) -> cont 66#;
+	PT _ (T_PosReal _) -> cont 67#;
+	PT _ (T_PosString _) -> cont 68#;
+	PT _ (T_PosIdent _) -> cont 69#;
+	_ -> happyError' (tk:tks)
+	}
+
+happyError_ 70# tk tks = happyError' tks
+happyError_ _ tk tks = happyError' (tk:tks)
+
+happyThen :: () => Err a -> (a -> Err b) -> Err b
+happyThen = (thenM)
+happyReturn :: () => a -> Err a
+happyReturn = (returnM)
+happyThen1 m k tks = (thenM) m (\a -> k a tks)
+happyReturn1 :: () => a -> b -> Err a
+happyReturn1 = \a tks -> (returnM) a
+happyError' :: () => [(Token)] -> Err a
+happyError' = happyError
+
+pModule tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut13 x))
+
+pClafer tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut15 x))
+
+pConstraint tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 2# tks) (\x -> happyReturn (happyOut16 x))
+
+pAssertion tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 3# tks) (\x -> happyReturn (happyOut17 x))
+
+pGoal tks = happySomeParser where
+  happySomeParser = happyThen (happyParse 4# tks) (\x -> happyReturn (happyOut18 x))
+
+happySeq = happyDontSeq
+
+
+returnM :: a -> Err a
+returnM = return
+
+thenM :: Err a -> (a -> Err b) -> Err b
+thenM = (>>=)
+
+happyError :: [Token] -> Err a
+happyError ts =
+  Bad (pp ts) $ "syntax error at " ++ tokenPos ts ++ 
+  case ts of
+    [] -> []
+    [Err _] -> " due to lexer error"
+    _ -> " before " ++ unwords (map (id . prToken) (take 4 ts))
+
+myLexer = tokens
+
+gp x@(PT (Pn _ l c) _) = Span (Pos (toInteger l) (toInteger c)) (Pos (toInteger l) (toInteger c + toInteger (length $ prToken x)))
+pp (PT (Pn _ l c) _ :_) = Pos (toInteger l) (toInteger c)
+pp (Err (Pn _ l c) :_) = Pos (toInteger l) (toInteger c)
+pp _ = error "EOF"
+
+mkCatSpan :: (Spannable c) => c -> Span
+mkCatSpan = getSpan
+
+mkTokenSpan :: Token -> Span
+mkTokenSpan = gp
+{-# LINE 1 "templates\GenericTemplate.hs" #-}
+{-# LINE 1 "templates\\GenericTemplate.hs" #-}
+{-# LINE 1 "<built-in>" #-}
+{-# LINE 1 "<command-line>" #-}
+{-# LINE 9 "<command-line>" #-}
+{-# LINE 1 "C:\\dev\\MinGHC-7.10.1\\ghc-7.10.1\\lib/include\\ghcversion.h" #-}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{-# LINE 9 "<command-line>" #-}
 {-# LINE 1 "templates\\GenericTemplate.hs" #-}
 -- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp 
 
src-cmd/clafer.hs view
@@ -1,5 +1,5 @@ {-
- Copyright (C) 2012-2014 Kacper Bak, Jimmy Liang, Michal Antkiewicz <http://gsd.uwaterloo.ca>
+ Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang, Michal Antkiewicz <http://gsd.uwaterloo.ca>
 
  Permission is hereby granted, free of charge, to any person obtaining a copy of
  this software and associated documentation files (the "Software"), to deal in
@@ -40,11 +40,9 @@   return ()
 
 start :: ClaferArgs -> InputModel-> IO ()
-start args' model = if schema args'
-  then putStrLn claferIRXSD
-  else if ecore2clafer args'
-    then runEcore2Clafer (file args') $ (tooldir args')
-    else runCompiler Nothing args' model
+start args' model = if ecore2clafer args'
+  then runEcore2Clafer (file args') $ (tooldir args')
+  else runCompiler Nothing args' model
 
 runEcore2Clafer :: FilePath -> FilePath -> IO ()
 runEcore2Clafer    ecoreFile toolPath
src/Language/Clafer.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE NamedFieldPuns     #-}
 {-
- Copyright (C) 2012-2014 Kacper Bak, Jimmy Liang, Michal Antkiewicz <http://gsd.uwaterloo.ca>
+ Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang, Michal Antkiewicz <http://gsd.uwaterloo.ca>
 
  Permission is hereby granted, free of charge, to any person obtaining a copy of
  this software and associated documentation files (the "Software"), to deal in
@@ -80,7 +80,6 @@   , getEnv
   , putEnv
   , CompilerResult(..)
-  , claferIRXSD
   , InputModel
   , Token
   , Module
@@ -128,9 +127,7 @@ import           Language.Clafer.Generator.Graph
 import           Language.Clafer.Generator.Html
 import           Language.Clafer.Generator.Python
-import           Language.Clafer.Generator.Schema
 import           Language.Clafer.Generator.Stats
-import           Language.Clafer.Generator.Xml
 import           Language.Clafer.Intermediate.Desugarer
 import           Language.Clafer.Intermediate.Intclafer
 import           Language.Clafer.Intermediate.Resolver
@@ -251,22 +248,18 @@     inScopeModes :: Bool
     inScopeModes =
       Alloy `elem` mode args' ||
-      Alloy42 `elem` mode args' ||
       Choco `elem` mode args'
 
     getScopesList :: (Map.Map ClaferMode CompilerResult) -> [(UID, Integer)]
     getScopesList    resultsMap =
         let
            alloyResult = Map.lookup Alloy resultsMap
-           alloy42Result = Map.lookup Alloy42 resultsMap
            chocoResult = Map.lookup Choco resultsMap
         in
            if (isNothing alloyResult)
-           then if (isNothing alloy42Result)
-                then if (isNothing chocoResult)
-                     then []
-                     else scopesList $ fromJust chocoResult
-                else scopesList $ fromJust alloy42Result
+           then if (isNothing chocoResult)
+                then []
+                else scopesList $ fromJust chocoResult
            else scopesList $ fromJust alloyResult
 
 summary :: String -> CompilerResult -> CompilerResult
@@ -285,14 +278,9 @@   let path = (tooldir args') ++ "/"
   liftIO $ putStrLn ("Validating '" ++ fo ++"'")
   let modes = mode args'
-  when (Xml `elem` modes && "xml" `isSuffixOf` fo) $ do
-      writeFile "ClaferIR.xsd" claferIRXSD
-      voidf $ system $ "java -classpath " ++ path ++ " XsdCheck ClaferIR.xsd " ++ fo
-  when (Alloy `elem` modes && "als41" `isSuffixOf` fo) $ do
-    voidf $ system $ validateAlloy path "4" ++ fo
-  when (Alloy42 `elem` modes && "als" `isSuffixOf` fo) $ do
+  when (Alloy `elem` modes && ".als" `isSuffixOf` fo) $ do
     voidf $ system $ validateAlloy path "4.2" ++ fo
-  when (Mode.Clafer `elem` modes && "des.cfr" `isSuffixOf` fo) $ do
+  when (Mode.Clafer `elem` modes && ".des.cfr" `isSuffixOf` fo) $ do
     voidf $ system $ "../dist/build/clafer/clafer -s -m=clafer " ++ fo
 
 validateAlloy :: String -> String -> String
@@ -467,6 +455,7 @@     realLiterals = filter isIDouble iexps
     productOperators = filter isProductOperator iexps
     isIDouble (IDouble _) = True
+    isIDouble (IReal _) = True
     isIDouble _           = False
     isProductOperator (IFunExp op' _) = op' == iProdSet
     isProductOperator _               = False
@@ -476,8 +465,8 @@   where
     iClafers :: [ IClafer ]
     iClafers = universeOn biplate iModule
-    hasReferenceToReal (IClafer{_reference=(Just IReference{_ref=pexp'})}) = (getSuperId pexp') == "real"
-    hasReferenceToReal _               = False
+    hasReferenceToReal (IClafer{_reference=(Just IReference{_ref=pexp'})}) = any (`elem` [ "real", "double" ]) $ getRefIds pexp'
+    hasReferenceToReal _                                                   = False
 
 -- | Generates outputs for the given IR.
 generate :: Monad m => ClaferT m (Map.Map ClaferMode CompilerResult)
@@ -499,44 +488,12 @@         (if (Alloy `elem` modes)
           then if (hasNoRealLiterals && hasNoReferenceToReal && hasNoProductOperator)
                 then
-                  let
-                    (imod,strMap) = astrModule iModule
-                    alloyCode = genModule cargs{mode = [Alloy]} (imod, genv) scopes
-                    addCommentStats = if no_stats cargs then const else addStats
-                  in
-                    [ (Alloy,
-                      CompilerResult {
-                       extension = "als41",
-                       outputCode = addCommentStats (fst alloyCode) stats,
-                       statistics = stats,
-                       claferEnv  = env,
-                       mappingToAlloy = fromMaybe [] (Just $ snd alloyCode),
-                       stringMap = strMap,
-                       scopesList = scopes
-                      })
-                    ]
-                else [ (Alloy,
-                        NoCompilerResult {
-                         reason = "Alloy output unavailable because the model contains: "
-                                ++ (if hasNoRealLiterals then "" else " | a real number literal")
-                                ++ (if hasNoReferenceToReal then "" else " | a reference to a real")
-                                ++ (if hasNoProductOperator then "" else " | the product operator")
-                                ++ "."
-                        })
-                     ]
-          else []
-        )
-        ++
-        -- result for Alloy42
-        (if (Alloy42 `elem` modes)
-          then if (hasNoRealLiterals && hasNoReferenceToReal && hasNoProductOperator)
-                then
                    let
                       (imod,strMap) = astrModule iModule
-                      alloyCode = genModule cargs{mode = [Alloy42]} (imod, genv) scopes
+                      alloyCode = genModule cargs{mode = [Alloy]} (imod, genv) scopes
                       addCommentStats = if no_stats cargs then const else addStats
                    in
-                      [ (Alloy42,
+                      [ (Alloy,
                         CompilerResult {
                          extension = "als",
                          outputCode = addCommentStats (fst alloyCode) stats,
@@ -558,26 +515,20 @@                      ]
           else []
         )
-        -- result for XML
-        ++ (if (Xml `elem` modes)
-          then [ (Xml,
-                  CompilerResult {
-                   extension = "xml",
-                   outputCode = genXmlModule iModule,
-                   statistics = stats,
-                   claferEnv  = env,
-                   mappingToAlloy = [],
-                   stringMap = Map.empty,
-                   scopesList = []
-                  }) ]
-          else []
-        )
         -- result for JSON
         ++ (if (JSON `elem` modes)
           then [ (JSON,
                   CompilerResult {
                    extension = "json",
-                   outputCode = convertString $ encode $ toJSON iModule,
+                   outputCode = concat
+                     [ "{"
+                     , (case gatherObjectivesAndAttributes iModule $ astModuleTrace env of
+                        Nothing         -> ""
+                        Just objectives -> "\"objectives\":" ++ (convertString $ encode $ toJSON objectives) ++ ",")
+                     , "\"iModule\":"
+                     , convertString $ encode $ toJSON iModule
+                     , "}"
+                     ],
                    statistics = stats,
                    claferEnv  = env,
                    mappingToAlloy = [],
@@ -713,6 +664,23 @@ showInterval (n, -1) = show n ++ "..*"
 showInterval (n, m) = show n ++ ".." ++ show m
 
--- | The XML Schema of the IR
-claferIRXSD :: String
-claferIRXSD = Language.Clafer.Generator.Schema.xsd
+gatherObjectivesAndAttributes :: IModule -> Map.Map Span [Ast] -> Maybe ObjectivesAndAttributes
+gatherObjectivesAndAttributes    iModule    astModuleTrace'      = let
+    objectives = (foldl' gatherObjectives [] $ _mDecls iModule)
+  in if null objectives
+     then Nothing
+     else Just $ ObjectivesAndAttributes objectives (map _uid $ filter isIntClafer iClafers)
+  where
+    gatherObjectives :: [String] -> IElement         -> [String]
+    gatherObjectives    objs        (IEGoal _ cpexp') = printCPexp (Map.lookup (_inPos cpexp') astModuleTrace'):objs
+    gatherObjectives    objs        _                 = objs
+
+    printCPexp :: Maybe [Ast] -> String
+    printCPexp (Just [e]) = printAstNode e
+    printCPexp _          = "[BUG]: expression not found!"
+
+    iClafers :: [ IClafer ]
+    iClafers = universeOn biplate iModule
+
+    isIntClafer (IClafer{_reference=(Just IReference{_ref=pexp'})}) = any (`elem` ["integer", "int"]) $ getRefIds pexp'
+    isIntClafer _                                                   = False
src/Language/Clafer/ClaferArgs.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE DeriveDataTypeable #-}
 {-
- Copyright (C) 2012-2014 Kacper Bak, Jimmy Liang <http://gsd.uwaterloo.ca>
+ Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang <http://gsd.uwaterloo.ca>
 
  Permission is hereby granted, free of charge, to any person obtaining a copy of
  this software and associated documentation files (the "Software"), to deal in
@@ -26,11 +26,9 @@ -}
 module Language.Clafer.ClaferArgs where
 
-import System.IO ( stdin, hGetContents )
 import System.Console.CmdArgs
 import System.Console.CmdArgs.Explicit hiding (mode)
 import Data.List
-import Data.Maybe
 import Language.Clafer.SplitJoin
 import Paths_clafer (version)
 import Data.Version (showVersion)
@@ -38,10 +36,10 @@ import GetURL
 
 -- | Type of output to be generated at the end of compilation
-data ClaferMode = Alloy42 | Alloy | Xml | JSON | Clafer | Html | Graph | CVLGraph | Python | Choco
+data ClaferMode = Alloy | JSON | Clafer | Html | Graph | CVLGraph | Python | Choco
   deriving (Eq, Show, Ord, Data, Typeable)
 instance Default ClaferMode where
-  def = Alloy42
+  def = Alloy
 
 -- | Scope inference strategy
 data ScopeStrategy = None | Simple
@@ -60,9 +58,7 @@       skip_resolver :: Bool,
       keep_unused :: Bool,
       no_stats :: Bool,
-      schema :: Bool,
       validate :: Bool,
-      noalloyruncommand :: Bool,
       tooldir :: FilePath,
       alloy_mapping :: Bool,
       self_contained :: Bool,
@@ -72,28 +68,25 @@       ecore2clafer :: Bool,
       scope_strategy :: ScopeStrategy,
       afm :: Bool,
-      skip_goals :: Bool,
       meta_data :: Bool,
       file :: FilePath
-    } deriving (Show, Data, Typeable)
+    } deriving (Eq, Show, Data, Typeable)
 
 clafer :: ClaferArgs
 clafer = ClaferArgs {
-  mode                = [] &= help "Generated output type. Available CLAFERMODEs are: 'alloy' (Alloy 4.1); 'alloy42' (default, Alloy 4.2); 'xml' (intermediate representation of Clafer model); 'json' (intermediate representation of Clafer model); 'clafer' (analyzed and desugared clafer model); 'html' (original model in HTML); 'graph' (graphical representation written in DOT language); 'cvlgraph' (cvl notation representation written in DOT language); 'python' (generates IR in python); 'choco' (Choco constraint programming solver). Multiple modes can be specified at the same time, e.g., '-m alloy -m html'." &= name "m",
+  mode                = [] &= help "Generated output type. Available CLAFERMODEs are: 'alloy' (default, Alloy 4.2); 'json' (intermediate representation of Clafer model); 'clafer' (analyzed and desugared clafer model); 'html' (original model in HTML); 'graph' (graphical representation written in DOT language); 'cvlgraph' (cvl notation representation written in DOT language); 'python' (generates IR in python); 'choco' (Choco constraint programming solver). Multiple modes can be specified at the same time, e.g., '-m alloy -m html'." &= name "m",
   console_output      = def &= help "Output code on console." &= name "o",
-  flatten_inheritance = def &= help "Flatten inheritance ('alloy' and 'alloy42' modes only)." &= name "i",
+  flatten_inheritance = def &= help "Flatten inheritance ('alloy' mode only)." &= name "i",
   timeout_analysis    = def &= help "Timeout for analysis.",
   no_layout           = def &= help "Don't resolve off-side rule layout." &= name "l",
   new_layout          = def &= help "Use new fast layout resolver (experimental)." &= name "nl",
   check_duplicates    = def &= help "Check duplicated clafer names in the entire model."  &= name "c",
   skip_resolver       = def &= help "Skip name resolution." &= name "f",
-  keep_unused         = def &= help "Keep uninstantated abstract clafers ('alloy' and 'alloy42' modes only)." &= name "k",
+  keep_unused         = def &= help "Keep uninstantated abstract clafers ('alloy' mode only)." &= name "k",
   no_stats            = def &= help "Don't print statistics." &= name "s",
-  schema              = def &= help "Show Clafer IR (intermediate representation) XML schema.",
-  validate            = def &= help "Validate outputs of all modes. Uses 'tools/XsdCheck.class' for XML,  'tools/alloy4.jar' and 'tools/alloy4.2.jar' for Alloy models, and Clafer translator for desugared Clafer models. Use '--tooldir' to override the default location of these tools." &= name "v",
-  noalloyruncommand   = def &= help "For usage with partial instances: Don't generate the alloy 'run show for ... ' command, and rename @.ref with unique names  ('alloy' and 'alloy42' modes only)." &= name "nr",
+  validate            = def &= help "Validate outputs of all modes. Uses 'tools/alloy4.2.jar' for Alloy models, and Clafer translator for desugared Clafer models. Use '--tooldir' to override the default location of these tools." &= name "v",
   tooldir             = def &= typDir &= help "Specify the tools directory ('validate' only). Default: 'tools/'.",
-  alloy_mapping       = def &= help "Generate mapping to Alloy source code ('alloy' and 'alloy42' modes only)." &= name "a",
+  alloy_mapping       = def &= help "Generate mapping to Alloy source code ('alloy' mode only)." &= name "a",
   self_contained      = def &= help "Generate a self-contained html document ('html' mode only).",
   add_graph           = def &= help "Add a graph to the generated html model ('html' mode only). Requires the \"dot\" executable to be on the system path.",
   show_references     = def &= help "Whether the links for references should be rendered. ('html' and 'graph' modes only)." &= name "sr",
@@ -101,52 +94,51 @@   ecore2clafer        = def &= help "Translate an ECore model into Clafer.",
   scope_strategy      = def &= help "Use scope computation strategy: none or simple (default)." &= name "ss",
   afm                 = def &= help "Throws an error if the cardinality of any of the clafers is above 1." &= name "check-afm",
-  skip_goals          = def &= help "Skip generation of Alloy code for goals. Useful for all tools working with standard Alloy." &= name "sg",
-  meta_data           = def &= help "Generate a 'fully qualified name'-'least-partially-qualified name'-'unique ID' map ('.cfr-map'). In Alloy, Alloy42, and Choco modes, generate the scopes map ('.cfr-scope').",
+  meta_data           = def &= help "Generate a 'fully qualified name'-'least-partially-qualified name'-'unique ID' map ('.cfr-map'). In Alloy and Choco modes, generate the scopes map ('.cfr-scope').",
   file                = def &= args   &= typ "FILE"
  } &= summary ("Clafer " ++ showVersion Paths_clafer.version) &= program "clafer"
 
 mergeArgs :: ClaferArgs -> ClaferArgs -> ClaferArgs
-mergeArgs a1 a2  = ClaferArgs (mode a1) (coMergeArg)
+mergeArgs a1 a2  = ClaferArgs (mode a1) coMergeArg
   (mergeArg flatten_inheritance) (mergeArg timeout_analysis)
   (mergeArg no_layout) (mergeArg new_layout)
   (mergeArg check_duplicates) (mergeArg skip_resolver)
-  (mergeArg keep_unused) (mergeArg no_stats) (mergeArg schema)
-  (mergeArg validate) (mergeArg noalloyruncommand) (toolMergeArg)
+  (mergeArg keep_unused) (mergeArg no_stats)
+  (mergeArg validate) toolMergeArg
   (mergeArg alloy_mapping) (mergeArg self_contained)
   (mergeArg add_graph) (mergeArg show_references)
   (mergeArg add_comments) (mergeArg ecore2clafer)
-  (mergeArg scope_strategy) (mergeArg afm) (mergeArg skip_goals)
+  (mergeArg scope_strategy) (mergeArg afm)
   (mergeArg meta_data) (mergeArg file)
   where
     coMergeArg :: Bool
-    coMergeArg = if (r1 /= False) then r1 else
-      if (r2 /= False) then r2 else (null $ file a1)
+    coMergeArg = if r1 then r1 else
+      if r2 then r2 else (null $ file a1)
          where r1 = console_output a1;r2 = console_output a2
     toolMergeArg :: String
-    toolMergeArg = if (r1 /= "") then r1 else
-      if (r2 /= "") then r2 else "/tools"
+    toolMergeArg = if r1 /= "" then r1 else
+      if r2 /= "" then r2 else "/tools"
       where r1 = tooldir a1;r2 = tooldir a2
     mergeArg :: (Default a, Eq a) => (ClaferArgs -> a) -> a
-    mergeArg f = (\r -> if (r /= def) then r else f a2) $ f a1
+    mergeArg f = (\r -> if r /= def then r else f a2) $ f a1
 
 mainArgs :: IO (ClaferArgs, String)
 mainArgs = do
-  args' <- cmdArgs clafer
-  model <- retrieveModelFromURL $ file args'
-  let args'' = argsWithOPTIONS args' model
-  -- Alloy42 should be the default mode but only if nothing else was specified
-  -- cannot use [ Alloy42 ] as the default in the definition of `clafer :: ClaferArgs` since
-  -- Alloy42 will always be a mode in addition to the other specified modes (it will become mandatory)
-  let args''' = if null $ mode args''
-                then args''{mode = [ Alloy42 ]}
-                else args''
-  return $ (args''', model)
+  argsFromCmd <- cmdArgs clafer
+  model <- retrieveModelFromURL $ file argsFromCmd
+  let argsWithOpts = argsWithOPTIONS argsFromCmd model
+  -- Alloy should be the default mode but only if nothing else was specified
+  -- cannot use [ Alloy ] as the default in the definition of `clafer :: ClaferArgs` since
+  -- Alloy will always be a mode in addition to the other specified modes (it will become mandatory)
+  let argsWithDef = if null $ mode argsWithOpts
+                then argsWithOpts{mode = [ Alloy ]}
+                else argsWithOpts
+  return (argsWithDef, model)
 
 retrieveModelFromURL :: String -> IO String
-retrieveModelFromURL url = do
+retrieveModelFromURL url =
   case url of
-    "" -> hGetContents stdin -- this is the pre-module system behavior
+    "" -> getContents -- this is the pre-module system behavior
     ('f':'i':'l':'e':':':'/':'/':n) -> readFile n
     ('h':'t':'t':'p':':':'/':'/':_) -> getURL url
     ('f':'t':'p':':':'/':'/':_) -> getURL url
@@ -154,14 +146,36 @@ 
 argsWithOPTIONS :: ClaferArgs -> String -> ClaferArgs
 argsWithOPTIONS    args'         model   =
-  let
-    firstLine = case lines model of
-                 [] -> ""
-                 (s:_) -> s
-    options = fromMaybe "" $ stripPrefix "//# OPTIONS " firstLine
-  in
-    either (const args') (mergeArgs args' . cmdArgsValue) $
-               process (cmdArgsMode clafer) $ Language.Clafer.SplitJoin.splitArgs options
+  if "//# OPTIONS " `isPrefixOf` model
+  then either (const args') (mergeArgs args' . cmdArgsValue) $ -- merge wth command line arguments, which take precedence
+          process (cmdArgsMode clafer) $          -- instantiate ClaferArgs record
+            Language.Clafer.SplitJoin.splitArgs $ -- extract individual arguments
+              drop 12 $                           -- strip "//# OPTIONS "
+                takeWhile (/= '\n') model         -- get first line
+  else args'
 
 defaultClaferArgs :: ClaferArgs
-defaultClaferArgs = ClaferArgs [ def ] True False 0 False False False False False False False False False "tools/" False False False False False False Simple False False False ""
+defaultClaferArgs = ClaferArgs
+  { mode = [ def ]
+  , console_output = True
+  , flatten_inheritance = False
+  , timeout_analysis = 0
+  , no_layout = False
+  , new_layout = False
+  , check_duplicates = False
+  , skip_resolver = False
+  , keep_unused = False
+  , no_stats = False
+  , validate = False
+  , tooldir = "tools/"
+  , alloy_mapping = False
+  , self_contained = False
+  , add_graph = False
+  , show_references = False
+  , add_comments = False
+  , ecore2clafer = False
+  , scope_strategy = Simple
+  , afm = False
+  , meta_data = False
+  , file = ""
+  }
src/Language/Clafer/Common.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE DeriveDataTypeable, RankNTypes, KindSignatures, FlexibleContexts #-}
 {-
- Copyright (C) 2012-2014 Kacper Bak, Jimmy Liang <http://gsd.uwaterloo.ca>
+ Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang <http://gsd.uwaterloo.ca>
 
  Permission is hereby granted, free of charge, to any person obtaining a copy of
  this software and associated documentation files (the "Software"), to deal in
@@ -50,8 +50,6 @@ mkInteger :: Read a => PosInteger -> a
 mkInteger (PosInteger (_, n)) = read n
 
-type Ident = PosIdent
-
 -- | Returns only [] or [_]
 getSuper :: IClafer -> [String]
 getSuper claf = case getSuperId <$> _super claf of
@@ -59,21 +57,37 @@     Just "clafer" -> error "Bug: The identifier 'clafer' should never be returned as super type"
     Just x        -> [x]
 
--- | Returns only [] or [_]
+-- | Returns a list of any length
 getReference :: IClafer -> [String]
-getReference c = case getSuperId <$> _ref <$> _reference c of
-    Nothing -> []
-    Just x  -> [x]
+getReference c = case _ref <$> _reference c of
+    Nothing   -> []
+    Just ref' -> getRefIds ref'
 
--- | Returns only [] or [_] or [_, _]
+-- | Returns a list of any length
 getSuperAndReference :: IClafer -> [String]
 getSuperAndReference c = (getSuper c) ++ (getReference c)
 
 getSuperId :: PExp -> String
 getSuperId (PExp _ _ _ (IClaferId{ _sident = s})) = s
 getSuperId (PExp _ _ _ (IFunExp{_op=".", _exps = [_, rightExp]})) = getSuperId rightExp
-getSuperId pexp' = error $ "Bug: getSuperId called not on '[PExp (IClaferId)]' but instead on '" ++ show pexp' ++ "'"
+getSuperId pexp' = error $ "[Bug] Commmon.getSuperId called on unexpected argument '" ++ show pexp' ++ "'"
 
+getRefIds :: PExp -> [String]
+getRefIds (PExp _ _ _ (IClaferId{ _sident = s})) = [s]
+getRefIds (PExp _ _ _ (IFunExp{_op=".", _exps = [_, rightExp]})) = getRefIds rightExp
+getRefIds (PExp _ _ _ (IFunExp{_op="ifthenelse", _exps = [_, leftExp, rightExp]})) = getRefIds leftExp ++ getRefIds rightExp
+getRefIds (PExp _ _ _ (IFunExp{_op="++", _exps = [leftExp, rightExp]})) = getRefIds leftExp ++ getRefIds rightExp
+getRefIds (PExp _ _ _ (IFunExp{_op=",",  _exps = [leftExp, rightExp]})) = getRefIds leftExp ++ getRefIds rightExp
+getRefIds (PExp _ _ _ (IFunExp{_op="--", _exps = [leftExp, rightExp]})) = getRefIds leftExp ++ getRefIds rightExp
+getRefIds (PExp _ _ _ (IFunExp{_op="**", _exps = [leftExp, rightExp]})) = getRefIds leftExp ++ getRefIds rightExp
+getRefIds (PExp _ _ _ (IFunExp{_op="<:", _exps = [_, rightExp]})) = getRefIds rightExp
+getRefIds (PExp _ _ _ (IFunExp{_op=":>", _exps = [leftExp, _]})) = getRefIds leftExp
+getRefIds (PExp _ _ _ (IInt _)) = [integerType]
+getRefIds (PExp _ _ _ (IDouble _)) = [doubleType]
+getRefIds (PExp _ _ _ (IReal _)) = [realType]
+getRefIds (PExp _ _ _ (IStr _)) = [stringType]
+getRefIds pexp' = error $ "[Bug] Commmon.getRefIds called on unexpected argument '" ++ show pexp' ++ "'"
+
 isEqClaferId :: String -> IClafer -> Bool
 isEqClaferId    uid'      claf'    = _uid claf' == uid'
 
@@ -107,8 +121,9 @@ getClaferName _ = ""
 
 isTopLevel :: IClafer -> Bool
-isTopLevel IClafer{_parentUID="root"} = True
-isTopLevel _                          = False
+isTopLevel IClafer{_parentUID="root"}   = True
+isTopLevel IClafer{_parentUID="clafer"} = True
+isTopLevel _                            = False
 
 -- -----------------------------------------------------------------------------
 -- conversions
@@ -130,14 +145,15 @@ createUidIClaferMap    iModule  = foldl'
     (\accumMap' claf -> SMap.insert (_uid claf) claf accumMap')
     (SMap.singleton rootIdent rootClafer)
-    (integerClafer : intClafer : stringClafer : realClafer : booleanClafer : clafer : allClafers)
+    (integerClafer : intClafer : stringClafer : doubleClafer : realClafer : booleanClafer : clafer : allClafers)
   where
     allClafers :: [ IClafer ]
     allClafers = universeOn biplate iModule
     rootClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) rootIdent rootIdent "" Nothing Nothing (Just (1,1)) (1, 1) (_mDecls iModule)
-    integerClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) integerType integerType "" Nothing Nothing (Just (1,1)) (1, 1) []
-    intClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) "int" "int" "" Nothing Nothing (Just (1,1)) (1, 1) []
+    integerClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) integerType integerType "" (Just $ pExpDefPidPos $ IClaferId "" doubleType True $ Just doubleType) Nothing (Just (1,1)) (1, 1) []
+    intClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) "int" "int" "" (Just $ pExpDefPidPos $ IClaferId "" doubleType True $ Just doubleType) Nothing (Just (1,1)) (1, 1) []
     stringClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) stringType stringType "" Nothing Nothing (Just (1,1)) (1, 1) []
+    doubleClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) doubleType doubleType "" (Just $ pExpDefPidPos $ IClaferId "" realType True $ Just realType) Nothing (Just (1,1)) (1, 1) []
     realClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) realType realType "" Nothing Nothing (Just (1,1)) (1, 1) []
     booleanClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) booleanType booleanType "" Nothing Nothing (Just (1,1)) (1, 1) []
     clafer = IClafer noSpan False (Just $ IGCard False (0, -1)) baseClafer baseClafer "" Nothing Nothing (Just (1,1)) (1, 1) []
@@ -148,6 +164,9 @@ findIClafer :: UIDIClaferMap -> UID -> Maybe IClafer
 findIClafer    uidIClaferMap    uid' = SMap.lookup uid' uidIClaferMap
 
+isTopLevelByUID :: UIDIClaferMap -> UID -> Maybe Bool
+isTopLevelByUID    uidIClaferMap    uid' = isTopLevel <$> (findIClafer uidIClaferMap uid')
+
 -- | Finds all super clafers according to sFun
 findHierarchy :: (IClafer -> [String]) -> UIDIClaferMap -> IClafer -> [IClafer]
 findHierarchy    sFun                     uidIClaferMap    clafer   = case sFun clafer of
@@ -172,9 +191,9 @@   if uidToFind == _uid currentClafer
   then return currentClafer
   else do
-    superClaferUID <- getSuperId <$> _super currentClafer
-    superClafer <- findIClafer uidIClaferMap superClaferUID
-    findUIDinSupers uidIClaferMap uidToFind superClafer
+      superClaferUID <- getSuperId <$> _super currentClafer
+      superClafer <- findIClafer uidIClaferMap superClaferUID
+      findUIDinSupers uidIClaferMap uidToFind superClafer
 
 -- | traverse the containment hierarchy upwards to find a clafer with the given uidToFind
 findUIDinParents :: UIDIClaferMap -> UID    -> IClafer      -> Maybe IClafer
@@ -190,11 +209,11 @@   { _headClafer :: IClafer               -- ^ the clafer for which the match is computed
   , _parentClafer :: IClafer             -- ^ parent of the head clafer
   , _parentsSuperClafer :: Maybe IClafer -- ^ parent of the super of the head clafer
-  , _targetClafer :: Maybe IClafer       -- ^ target of the head clafer
-  , _targetsSuperClafer :: Maybe IClafer -- ^ super of the target of the head clafer
+  , _targetClafer :: [IClafer]           -- ^ targets of the head clafer
+  , _targetsSuperClafer :: [IClafer] -- ^ super of the target of the head clafer
   , _superClafer :: IClafer              -- ^ super of the head clafer (must exist, otherwise no match)
   , _superClafersParent :: IClafer       -- ^ parent of the super of the head clafer
-  , _superClafersTarget :: Maybe IClafer -- ^ target of the super of the head clafer
+  , _superClafersTarget :: [IClafer]     -- ^ targets of the super of the head clafer
   } deriving Show
 
 -- | This represents a match of this shape
@@ -248,7 +267,7 @@       = case (_reference hc, _reference hcs) of
           (Just IReference{_isSet=headIsSet}, Just IReference{_isSet=superIsSet}) -> superIsSet <= headIsSet  -- set (True) implies set (True), bag (False) allows bag (False) or set (True)
           _ -> True -- covers 1) only one of them has a ref, and 2) none of them has a ref
-    properTargetSubtyping NestedInheritanceMatch{_targetClafer=(Just targetClafer), _superClafersTarget=(Just superClafersTarget)}
+    properTargetSubtyping NestedInheritanceMatch{_targetClafer=[targetClafer], _superClafersTarget=[superClafersTarget]}
       = isJust $ findUIDinSupers uidIClaferMap (_uid superClafersTarget) targetClafer
     properTargetSubtyping _
       = True -- covers 1) only one of the target clafers exists, and 2) none of the target clafers exist
@@ -277,12 +296,16 @@   let
     parentsSuperClafer :: Maybe IClafer
     parentsSuperClafer = findIClafer uidIClaferMap =<< getSuperId <$> _super parentClafer  -- safe to use fromJust becuase _super is not isNothing
-    targetClafer :: Maybe IClafer
-    targetClafer = findIClafer uidIClaferMap =<< getSuperId <$> _ref <$> _reference headClafer
-    targetsSuperClafer :: Maybe IClafer
-    targetsSuperClafer = findIClafer uidIClaferMap =<< getSuperId <$> (_super =<< targetClafer)
-    superClafersTarget :: Maybe IClafer
-    superClafersTarget = findIClafer uidIClaferMap =<< getSuperId <$> _ref <$> _reference superClafer
+    targetClafer :: [IClafer]
+    targetClafer = case _ref <$> _reference headClafer of
+      Just pexp' -> mapMaybe (findIClafer uidIClaferMap) (getRefIds pexp')
+      Nothing    -> []
+    targetsSuperClafer :: [IClafer]
+    targetsSuperClafer = mapMaybe (findIClafer uidIClaferMap) $ map getSuperId $ catMaybes $ map _super targetClafer
+    superClafersTarget :: [IClafer]
+    superClafersTarget = case _ref <$> _reference superClafer of
+      Just pexp' -> mapMaybe (findIClafer uidIClaferMap) (getRefIds pexp')
+      Nothing    -> []
 --  traceM $ "matched parentsSuperClafer " ++ show (_uid <$> parentsSuperClafer)
 --  traceM $ "matched targetClafer " ++ show (_uid <$> targetClafer)
 --  traceM $ "matched targetsSuperClafer " ++ show (_uid <$> targetsSuperClafer)
@@ -512,6 +535,9 @@ realType :: String
 realType = "real"
 
+doubleType :: String
+doubleType = "double"
+
 booleanType :: String
 booleanType = "boolean"
 
@@ -522,7 +548,7 @@ modSep = "\\"
 
 primitiveTypes :: [String]
-primitiveTypes = [stringType, intType, integerType, realType]
+primitiveTypes = [stringType, intType, integerType, doubleType, realType]
 
 isPrimitive :: String -> Bool
 isPrimitive = flip elem primitiveTypes
src/Language/Clafer/Front/AbsClafer.hs view
@@ -32,6 +32,8 @@   deriving (Eq, Ord, Show, Read, Data, Typeable, Generic)
 newtype PosDouble = PosDouble ((Int,Int),String)
   deriving (Eq, Ord, Show, Read, Data, Typeable, Generic)
+newtype PosReal = PosReal ((Int,Int),String)
+  deriving (Eq, Ord, Show, Read, Data, Typeable, Generic)
 newtype PosString = PosString ((Int,Int),String)
   deriving (Eq, Ord, Show, Read, Data, Typeable, Generic)
 newtype PosIdent = PosIdent ((Int,Int),String)
@@ -48,6 +50,12 @@     where
       c' = toInteger c
       l' = toInteger l
+instance Spannable PosReal where
+  getSpan (PosReal ((c, l), lex')) = 
+    Span (Pos c' l') (Pos c' $ l' + len lex')
+    where
+      c' = toInteger c
+      l' = toInteger l
 instance Spannable PosString where
   getSpan (PosString ((c, l), lex')) = 
     Span (Pos c' l') (Pos c' $ l' + len lex')
@@ -83,11 +91,11 @@ 
 instance Spannable Constraint where
     getSpan (Constraint s _ ) = s
-data SoftConstraint = SoftConstraint Span [Exp]
+data Assertion = Assertion Span [Exp]
   deriving (Eq, Ord, Show, Read, Data, Typeable, Generic)
 
-instance Spannable SoftConstraint where
-    getSpan (SoftConstraint s _ ) = s
+instance Spannable Assertion where
+    getSpan (Assertion s _ ) = s
 data Goal = Goal Span [Exp]
   deriving (Eq, Ord, Show, Read, Data, Typeable, Generic)
 
@@ -110,7 +118,7 @@     | ClaferUse Span Name Card Elements
     | Subconstraint Span Constraint
     | Subgoal Span Goal
-    | Subsoftconstraint Span SoftConstraint
+    | SubAssertion Span Assertion
   deriving (Eq, Ord, Show, Read, Data, Typeable, Generic)
 
 instance Spannable Element where
@@ -118,8 +126,8 @@     getSpan (ClaferUse s _ _ _ ) = s
     getSpan (Subconstraint s _ ) = s
     getSpan (Subgoal s _ ) = s
-    getSpan (Subsoftconstraint s _ ) = s
-data Super = SuperEmpty Span | SuperSome Span SetExp
+    getSpan (SubAssertion s _ ) = s
+data Super = SuperEmpty Span | SuperSome Span Exp
   deriving (Eq, Ord, Show, Read, Data, Typeable, Generic)
 
 instance Spannable Super where
@@ -127,8 +135,8 @@     getSpan (SuperSome s _ ) = s
 data Reference
     = ReferenceEmpty Span
-    | ReferenceSet Span SetExp
-    | ReferenceBag Span SetExp
+    | ReferenceSet Span Exp
+    | ReferenceBag Span Exp
   deriving (Eq, Ord, Show, Read, Data, Typeable, Generic)
 
 instance Spannable Reference where
@@ -196,10 +204,10 @@ instance Spannable Name where
     getSpan (Path s _ ) = s
 data Exp
-    = DeclAllDisj Span Decl Exp
-    | DeclAll Span Decl Exp
-    | DeclQuantDisj Span Quant Decl Exp
-    | DeclQuant Span Quant Decl Exp
+    = EDeclAllDisj Span Decl Exp
+    | EDeclAll Span Decl Exp
+    | EDeclQuantDisj Span Quant Decl Exp
+    | EDeclQuant Span Quant Decl Exp
     | EGMax Span Exp
     | EGMin Span Exp
     | EIff Span Exp Exp
@@ -216,28 +224,36 @@     | ENeq Span Exp Exp
     | EIn Span Exp Exp
     | ENin Span Exp Exp
-    | QuantExp Span Quant Exp
+    | EQuantExp Span Quant Exp
     | EAdd Span Exp Exp
     | ESub Span Exp Exp
     | EMul Span Exp Exp
     | EDiv Span Exp Exp
     | ERem Span Exp Exp
-    | ESumSetExp Span Exp
-    | EProdSetExp Span Exp
-    | ECSetExp Span Exp
+    | ESum Span Exp
+    | EProd Span Exp
+    | ECard Span Exp
     | EMinExp Span Exp
     | EImpliesElse Span Exp Exp Exp
+    | EDomain Span Exp Exp
+    | ERange Span Exp Exp
+    | EUnion Span Exp Exp
+    | EUnionCom Span Exp Exp
+    | EDifference Span Exp Exp
+    | EIntersection Span Exp Exp
+    | EJoin Span Exp Exp
+    | ClaferId Span Name
     | EInt Span PosInteger
     | EDouble Span PosDouble
+    | EReal Span PosReal
     | EStr Span PosString
-    | ESetExp Span SetExp
   deriving (Eq, Ord, Show, Read, Data, Typeable, Generic)
 
 instance Spannable Exp where
-    getSpan (DeclAllDisj s _ _ ) = s
-    getSpan (DeclAll s _ _ ) = s
-    getSpan (DeclQuantDisj s _ _ _ ) = s
-    getSpan (DeclQuant s _ _ _ ) = s
+    getSpan (EDeclAllDisj s _ _ ) = s
+    getSpan (EDeclAll s _ _ ) = s
+    getSpan (EDeclQuantDisj s _ _ _ ) = s
+    getSpan (EDeclQuant s _ _ _ ) = s
     getSpan (EGMax s _ ) = s
     getSpan (EGMin s _ ) = s
     getSpan (EIff s _ _ ) = s
@@ -254,42 +270,30 @@     getSpan (ENeq s _ _ ) = s
     getSpan (EIn s _ _ ) = s
     getSpan (ENin s _ _ ) = s
-    getSpan (QuantExp s _ _ ) = s
+    getSpan (EQuantExp s _ _ ) = s
     getSpan (EAdd s _ _ ) = s
     getSpan (ESub s _ _ ) = s
     getSpan (EMul s _ _ ) = s
     getSpan (EDiv s _ _ ) = s
     getSpan (ERem s _ _ ) = s
-    getSpan (ESumSetExp s _ ) = s
-    getSpan (EProdSetExp s _ ) = s
-    getSpan (ECSetExp s _ ) = s
+    getSpan (ESum s _ ) = s
+    getSpan (EProd s _ ) = s
+    getSpan (ECard s _ ) = s
     getSpan (EMinExp s _ ) = s
     getSpan (EImpliesElse s _ _ _ ) = s
+    getSpan (EDomain s _ _ ) = s
+    getSpan (ERange s _ _ ) = s
+    getSpan (EUnion s _ _ ) = s
+    getSpan (EUnionCom s _ _ ) = s
+    getSpan (EDifference s _ _ ) = s
+    getSpan (EIntersection s _ _ ) = s
+    getSpan (EJoin s _ _ ) = s
+    getSpan (ClaferId s _ ) = s
     getSpan (EInt s _ ) = s
     getSpan (EDouble s _ ) = s
+    getSpan (EReal s _ ) = s
     getSpan (EStr s _ ) = s
-    getSpan (ESetExp s _ ) = s
-data SetExp
-    = Union Span SetExp SetExp
-    | UnionCom Span SetExp SetExp
-    | Difference Span SetExp SetExp
-    | Intersection Span SetExp SetExp
-    | Domain Span SetExp SetExp
-    | Range Span SetExp SetExp
-    | Join Span SetExp SetExp
-    | ClaferId Span Name
-  deriving (Eq, Ord, Show, Read, Data, Typeable, Generic)
-
-instance Spannable SetExp where
-    getSpan (Union s _ _ ) = s
-    getSpan (UnionCom s _ _ ) = s
-    getSpan (Difference s _ _ ) = s
-    getSpan (Intersection s _ _ ) = s
-    getSpan (Domain s _ _ ) = s
-    getSpan (Range s _ _ ) = s
-    getSpan (Join s _ _ ) = s
-    getSpan (ClaferId s _ ) = s
-data Decl = Decl Span [LocId] SetExp
+data Decl = Decl Span [LocId] Exp
   deriving (Eq, Ord, Show, Read, Data, Typeable, Generic)
 
 instance Spannable Decl where
src/Language/Clafer/Front/LayoutResolver.hs view
@@ -182,6 +182,7 @@ addNewLines' :: (Monad m) => Int -> [Token] -> ClaferT m [ExToken]
 addNewLines' _ []                     = return []
 addNewLines' 0 (t:[])                 = return [ExToken t]
+addNewLines' 1 (t:[])                 = return [ExToken t]
 addNewLines' _ ((PT (Pn z x y) t):[]) = throwErr $ ParseErr (ErrPos z fPos fPos) $ "']' bracket missing for (" ++ show t ++ ")"
   where
     fPos = (Pos (fromIntegral x) (fromIntegral y))
@@ -196,7 +197,7 @@     addNewLines' (n - 1) (t1:ts) >>= (return . (ExToken t0:))
   | isNewLine t0 t1  = addNewLines' n (t1:ts) >>= (return . (ExToken t0:) . (NewLine (column t1, n):))
   | otherwise        = addNewLines' n (t1:ts) >>= (return . (ExToken t0:))
-addNewLines' _ _ = throwErr (ClaferErr "Function addNewLines' from LayoutResolver was given invalid arguments" :: CErr Span) -- This should never happen!
+addNewLines' _ tokens' = throwErr (ClaferErr ("[bug] LayoutResolver.addNewLines': invalid argument:" ++ show tokens') :: CErr Span) -- This should never happen!
 
 
 adjust :: (Monad m) => [Token] -> ClaferT m [Token]
src/Language/Clafer/Front/LexClafer.x view
@@ -20,7 +20,7 @@ $u = [\0-\255]          -- universal: any character
 
 @rsyms =    -- symbols and non-identifier-like reserved words
-   \= | \[ | \] | \< \< | \> \> | \{ | \} | \` | \: | \- \> | \- \> \> | \: \= | \? | \+ | \* | \. \. | \| | \< \= \> | \= \> | \| \| | \& \& | \! | \< | \> | \< \= | \> \= | \! \= | \- | \/ | \% | \# | \+ \+ | \, | \- \- | \* \* | \< \: | \: \> | \. | \; | \\ | \( | \)
+   \= | \[ | \] | \< \< | \> \> | \{ | \} | \` | \: | \- \> | \- \> \> | \: \= | \? | \+ | \* | \. \. | \| | \< \= \> | \= \> | \| \| | \& \& | \! | \< | \> | \< \= | \> \= | \! \= | \- | \/ | \% | \# | \< \: | \: \> | \+ \+ | \, | \- \- | \* \* | \. | \; | \\ | \( | \)
 
 :-
 "//" [.]* ; -- Toss single line comments
@@ -29,7 +29,8 @@ $white+ ;
 @rsyms { tok (\p s -> PT p (eitherResIdent (TV . share) s)) }
 $d + { tok (\p s -> PT p (eitherResIdent (T_PosInteger . share) s)) }
-$d + \. $d + (e \- ? $d +)? { tok (\p s -> PT p (eitherResIdent (T_PosDouble . share) s)) }
+$d + \. $d + e \- ? $d + { tok (\p s -> PT p (eitherResIdent (T_PosDouble . share) s)) }
+$d + \. $d + { tok (\p s -> PT p (eitherResIdent (T_PosReal . share) s)) }
 \" ($u # [\" \\]| \\ [\" \\ n t]) * \" { tok (\p s -> PT p (eitherResIdent (T_PosString . share) s)) }
 $l ($l | $d | \_ | \')* { tok (\p s -> PT p (eitherResIdent (T_PosIdent . share) s)) }
 
@@ -56,6 +57,7 @@  | TC !String         -- character literals
  | T_PosInteger !String
  | T_PosDouble !String
+ | T_PosReal !String
  | T_PosString !String
  | T_PosIdent !String
 
@@ -94,6 +96,7 @@   PT _ (TC s)   -> s
   PT _ (T_PosInteger s) -> s
   PT _ (T_PosDouble s) -> s
+  PT _ (T_PosReal s) -> s
   PT _ (T_PosString s) -> s
   PT _ (T_PosIdent s) -> s
 
src/Language/Clafer/Front/ParClafer.y view
@@ -11,7 +11,7 @@ %name pModule Module
 %name pClafer Clafer
 %name pConstraint Constraint
-%name pSoftConstraint SoftConstraint
+%name pAssertion Assertion
 %name pGoal Goal
 -- no lexer declaration
 %monad { Err } { thenM } { returnM }
@@ -84,6 +84,7 @@ 
 L_PosInteger { PT _ (T_PosInteger _) }
 L_PosDouble { PT _ (T_PosDouble _) }
+L_PosReal { PT _ (T_PosReal _) }
 L_PosString { PT _ (T_PosString _) }
 L_PosIdent { PT _ (T_PosIdent _) }
 
@@ -92,6 +93,7 @@ 
 PosInteger    :: { PosInteger} : L_PosInteger { PosInteger (mkPosToken $1)}
 PosDouble    :: { PosDouble} : L_PosDouble { PosDouble (mkPosToken $1)}
+PosReal    :: { PosReal} : L_PosReal { PosReal (mkPosToken $1)}
 PosString    :: { PosString} : L_PosString { PosString (mkPosToken $1)}
 PosIdent    :: { PosIdent} : L_PosIdent { PosIdent (mkPosToken $1)}
 
@@ -104,8 +106,8 @@ Clafer : Abstract GCard PosIdent Super Reference Card Init Elements { Clafer ((mkCatSpan $1) >- (mkCatSpan $2) >- (mkCatSpan $3) >- (mkCatSpan $4) >- (mkCatSpan $5) >- (mkCatSpan $6) >- (mkCatSpan $7) >- (mkCatSpan $8)) $1 $2 $3 $4 $5 $6 $7 $8 }
 Constraint :: { Constraint }
 Constraint : '[' ListExp ']' { Constraint ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3)) (reverse $2) }
-SoftConstraint :: { SoftConstraint }
-SoftConstraint : 'assert' '[' ListExp ']' { SoftConstraint ((mkTokenSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3) >- (mkTokenSpan $4)) (reverse $3) }
+Assertion :: { Assertion }
+Assertion : 'assert' '[' ListExp ']' { Assertion ((mkTokenSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3) >- (mkTokenSpan $4)) (reverse $3) }
 Goal :: { Goal }
 Goal : '<<' ListExp '>>' { Goal ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3)) (reverse $2) }
 Abstract :: { Abstract }
@@ -119,14 +121,14 @@         | '`' Name Card Elements { ClaferUse ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkCatSpan $3) >- (mkCatSpan $4)) $2 $3 $4 }
         | Constraint { Subconstraint ((mkCatSpan $1)) $1 }
         | Goal { Subgoal ((mkCatSpan $1)) $1 }
-        | SoftConstraint { Subsoftconstraint ((mkCatSpan $1)) $1 }
+        | Assertion { SubAssertion ((mkCatSpan $1)) $1 }
 Super :: { Super }
 Super : {- empty -} { SuperEmpty noSpan }
-      | ':' SetExp { SuperSome ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 }
+      | ':' Exp18 { SuperSome ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 }
 Reference :: { Reference }
 Reference : {- empty -} { ReferenceEmpty noSpan }
-          | '->' SetExp { ReferenceSet ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 }
-          | '->>' SetExp { ReferenceBag ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 }
+          | '->' Exp15 { ReferenceSet ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 }
+          | '->>' Exp15 { ReferenceBag ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 }
 Init :: { Init }
 Init : {- empty -} { InitEmpty noSpan }
      | InitHow Exp { InitSome ((mkCatSpan $1) >- (mkCatSpan $2)) $1 $2 }
@@ -155,10 +157,10 @@ Name :: { Name }
 Name : ListModId { Path ((mkCatSpan $1)) $1 }
 Exp :: { Exp }
-Exp : 'all' 'disj' Decl '|' Exp { DeclAllDisj ((mkTokenSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3) >- (mkTokenSpan $4) >- (mkCatSpan $5)) $3 $5 }
-    | 'all' Decl '|' Exp { DeclAll ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4)) $2 $4 }
-    | Quant 'disj' Decl '|' Exp { DeclQuantDisj ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3) >- (mkTokenSpan $4) >- (mkCatSpan $5)) $1 $3 $5 }
-    | Quant Decl '|' Exp { DeclQuant ((mkCatSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4)) $1 $2 $4 }
+Exp : 'all' 'disj' Decl '|' Exp { EDeclAllDisj ((mkTokenSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3) >- (mkTokenSpan $4) >- (mkCatSpan $5)) $3 $5 }
+    | 'all' Decl '|' Exp { EDeclAll ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4)) $2 $4 }
+    | Quant 'disj' Decl '|' Exp { EDeclQuantDisj ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3) >- (mkTokenSpan $4) >- (mkCatSpan $5)) $1 $3 $5 }
+    | Quant Decl '|' Exp { EDeclQuant ((mkCatSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4)) $1 $2 $4 }
     | Exp1 {  $1 }
 Exp1 :: { Exp }
 Exp1 : 'max' Exp2 { EGMax ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 }
@@ -191,7 +193,7 @@      | Exp7 'not' 'in' Exp8 { ENin ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4)) $1 $4 }
      | Exp8 {  $1 }
 Exp8 :: { Exp }
-Exp8 : Quant Exp12 { QuantExp ((mkCatSpan $1) >- (mkCatSpan $2)) $1 $2 }
+Exp8 : Quant Exp12 { EQuantExp ((mkCatSpan $1) >- (mkCatSpan $2)) $1 $2 }
      | Exp9 {  $1 }
 Exp9 :: { Exp }
 Exp9 : Exp9 '+' Exp10 { EAdd ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 }
@@ -203,44 +205,42 @@       | Exp10 '%' Exp11 { ERem ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 }
       | Exp11 {  $1 }
 Exp11 :: { Exp }
-Exp11 : 'sum' Exp12 { ESumSetExp ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 }
-      | 'product' Exp12 { EProdSetExp ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 }
-      | '#' Exp12 { ECSetExp ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 }
+Exp11 : 'sum' Exp12 { ESum ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 }
+      | 'product' Exp12 { EProd ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 }
+      | '#' Exp12 { ECard ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 }
       | '-' Exp12 { EMinExp ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 }
       | Exp12 {  $1 }
 Exp12 :: { Exp }
 Exp12 : 'if' Exp12 'then' Exp12 'else' Exp13 { EImpliesElse ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4) >- (mkTokenSpan $5) >- (mkCatSpan $6)) $2 $4 $6 }
       | Exp13 {  $1 }
 Exp13 :: { Exp }
-Exp13 : PosInteger { EInt ((mkCatSpan $1)) $1 }
+Exp13 : Exp13 '<:' Exp14 { EDomain ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 }
+      | Exp14 {  $1 }
+Exp14 :: { Exp }
+Exp14 : Exp14 ':>' Exp15 { ERange ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 }
+      | Exp15 {  $1 }
+Exp15 :: { Exp }
+Exp15 : Exp15 '++' Exp16 { EUnion ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 }
+      | Exp15 ',' Exp16 { EUnionCom ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 }
+      | Exp16 {  $1 }
+Exp16 :: { Exp }
+Exp16 : Exp16 '--' Exp17 { EDifference ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 }
+      | Exp17 {  $1 }
+Exp17 :: { Exp }
+Exp17 : Exp17 '**' Exp18 { EIntersection ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 }
+      | Exp18 {  $1 }
+Exp18 :: { Exp }
+Exp18 : Exp18 '.' Exp19 { EJoin ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 }
+      | Exp19 {  $1 }
+Exp19 :: { Exp }
+Exp19 : Name { ClaferId ((mkCatSpan $1)) $1 }
+      | PosInteger { EInt ((mkCatSpan $1)) $1 }
       | PosDouble { EDouble ((mkCatSpan $1)) $1 }
+      | PosReal { EReal ((mkCatSpan $1)) $1 }
       | PosString { EStr ((mkCatSpan $1)) $1 }
-      | SetExp { ESetExp ((mkCatSpan $1)) $1 }
       | '(' Exp ')' {  $2 }
-SetExp :: { SetExp }
-SetExp : SetExp '++' SetExp1 { Union ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 }
-       | SetExp ',' SetExp1 { UnionCom ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 }
-       | SetExp1 {  $1 }
-SetExp1 :: { SetExp }
-SetExp1 : SetExp1 '--' SetExp2 { Difference ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 }
-        | SetExp2 {  $1 }
-SetExp2 :: { SetExp }
-SetExp2 : SetExp2 '**' SetExp3 { Intersection ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 }
-        | SetExp3 {  $1 }
-SetExp3 :: { SetExp }
-SetExp3 : SetExp3 '<:' SetExp4 { Domain ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 }
-        | SetExp4 {  $1 }
-SetExp4 :: { SetExp }
-SetExp4 : SetExp4 ':>' SetExp5 { Range ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 }
-        | SetExp5 {  $1 }
-SetExp5 :: { SetExp }
-SetExp5 : SetExp5 '.' SetExp6 { Join ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 }
-        | SetExp6 {  $1 }
-SetExp6 :: { SetExp }
-SetExp6 : Name { ClaferId ((mkCatSpan $1)) $1 }
-        | '(' SetExp ')' {  $2 }
 Decl :: { Decl }
-Decl : ListLocId ':' SetExp { Decl ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 }
+Decl : ListLocId ':' Exp13 { Decl ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 }
 Quant :: { Quant }
 Quant : 'no' { QuantNo ((mkTokenSpan $1)) }
       | 'not' { QuantNot ((mkTokenSpan $1)) }
src/Language/Clafer/Front/PrintClafer.hs view
@@ -7,7 +7,6 @@ import Data.Char
 import Prelude hiding (exp, init)
 
-
 -- the top-level printing method
 printTree :: Print a => a -> String
 printTree = render . prt 0
@@ -88,6 +87,10 @@   prt _ (PosDouble (_,i)) = doc (showString ( i))
 
 
+instance Print PosReal where
+  prt _ (PosReal (_,i)) = doc (showString ( i))
+
+
 instance Print PosString where
   prt _ (PosString (_,i)) = doc (showString ( i))
 
@@ -117,9 +120,9 @@   prt i e = case e of
     Constraint _ exps -> prPrec i 0 (concatD [doc (showString "["), prt 0 exps, doc (showString "]")])
 
-instance Print SoftConstraint where
+instance Print Assertion where
   prt i e = case e of
-    SoftConstraint _ exps -> prPrec i 0 (concatD [doc (showString "assert"), doc (showString "["), prt 0 exps, doc (showString "]")])
+    Assertion _ exps -> prPrec i 0 (concatD [doc (showString "assert"), doc (showString "["), prt 0 exps, doc (showString "]")])
 
 instance Print Goal where
   prt i e = case e of
@@ -141,7 +144,7 @@     ClaferUse _ name card elements -> prPrec i 0 (concatD [doc (showString "`"), prt 0 name, prt 0 card, prt 0 elements])
     Subconstraint _ constraint -> prPrec i 0 (concatD [prt 0 constraint])
     Subgoal _ goal -> prPrec i 0 (concatD [prt 0 goal])
-    Subsoftconstraint _ softconstraint -> prPrec i 0 (concatD [prt 0 softconstraint])
+    SubAssertion _ assertion -> prPrec i 0 (concatD [prt 0 assertion])
   prtList es = case es of
    [] -> (concatD [])
    x:xs -> (concatD [prt 0 x, prt 0 xs])
@@ -149,13 +152,13 @@ instance Print Super where
   prt i e = case e of
     SuperEmpty _ -> prPrec i 0 (concatD [])
-    SuperSome _ setexp -> prPrec i 0 (concatD [doc (showString ":"), prt 0 setexp])
+    SuperSome _ exp18 -> prPrec i 0 (concatD [doc (showString ":"), prt 18 exp18])
 
 instance Print Reference where
   prt i e = case e of
     ReferenceEmpty _ -> prPrec i 0 (concatD [])
-    ReferenceSet _ setexp -> prPrec i 0 (concatD [doc (showString "->"), prt 0 setexp])
-    ReferenceBag _ setexp -> prPrec i 0 (concatD [doc (showString "->>"), prt 0 setexp])
+    ReferenceSet _ exp15 -> prPrec i 0 (concatD [doc (showString "->"), prt 15 exp15])
+    ReferenceBag _ exp15 -> prPrec i 0 (concatD [doc (showString "->>"), prt 15 exp15])
 
 instance Print Init where
   prt i e = case e of
@@ -200,10 +203,10 @@ 
 instance Print Exp where
   prt i e = case e of
-    DeclAllDisj _ decl exp -> prPrec i 0 (concatD [doc (showString "all"), doc (showString "disj"), prt 0 decl, doc (showString "|"), prt 0 exp])
-    DeclAll _ decl exp -> prPrec i 0 (concatD [doc (showString "all"), prt 0 decl, doc (showString "|"), prt 0 exp])
-    DeclQuantDisj _ quant decl exp -> prPrec i 0 (concatD [prt 0 quant, doc (showString "disj"), prt 0 decl, doc (showString "|"), prt 0 exp])
-    DeclQuant _ quant decl exp -> prPrec i 0 (concatD [prt 0 quant, prt 0 decl, doc (showString "|"), prt 0 exp])
+    EDeclAllDisj _ decl exp -> prPrec i 0 (concatD [doc (showString "all"), doc (showString "disj"), prt 0 decl, doc (showString "|"), prt 0 exp])
+    EDeclAll _ decl exp -> prPrec i 0 (concatD [doc (showString "all"), prt 0 decl, doc (showString "|"), prt 0 exp])
+    EDeclQuantDisj _ quant decl exp -> prPrec i 0 (concatD [prt 0 quant, doc (showString "disj"), prt 0 decl, doc (showString "|"), prt 0 exp])
+    EDeclQuant _ quant decl exp -> prPrec i 0 (concatD [prt 0 quant, prt 0 decl, doc (showString "|"), prt 0 exp])
     EGMax _ exp2 -> prPrec i 1 (concatD [doc (showString "max"), prt 2 exp2])
     EGMin _ exp2 -> prPrec i 1 (concatD [doc (showString "min"), prt 2 exp2])
     EIff _ exp1 exp2 -> prPrec i 1 (concatD [prt 1 exp1, doc (showString "<=>"), prt 2 exp2])
@@ -220,39 +223,36 @@     ENeq _ exp7 exp8 -> prPrec i 7 (concatD [prt 7 exp7, doc (showString "!="), prt 8 exp8])
     EIn _ exp7 exp8 -> prPrec i 7 (concatD [prt 7 exp7, doc (showString "in"), prt 8 exp8])
     ENin _ exp7 exp8 -> prPrec i 7 (concatD [prt 7 exp7, doc (showString "not"), doc (showString "in"), prt 8 exp8])
-    QuantExp _ quant exp12 -> prPrec i 8 (concatD [prt 0 quant, prt 12 exp12])
+    EQuantExp _ quant exp12 -> prPrec i 8 (concatD [prt 0 quant, prt 12 exp12])
     EAdd _ exp9 exp10 -> prPrec i 9 (concatD [prt 9 exp9, doc (showString "+"), prt 10 exp10])
     ESub _ exp9 exp10 -> prPrec i 9 (concatD [prt 9 exp9, doc (showString "-"), prt 10 exp10])
     EMul _ exp10 exp11 -> prPrec i 10 (concatD [prt 10 exp10, doc (showString "*"), prt 11 exp11])
     EDiv _ exp10 exp11 -> prPrec i 10 (concatD [prt 10 exp10, doc (showString "/"), prt 11 exp11])
     ERem _ exp10 exp11 -> prPrec i 10 (concatD [prt 10 exp10, doc (showString "%"), prt 11 exp11])
-    ESumSetExp _ exp12 -> prPrec i 11 (concatD [doc (showString "sum"), prt 12 exp12])
-    EProdSetExp _ exp12 -> prPrec i 11 (concatD [doc (showString "product"), prt 12 exp12])
-    ECSetExp _ exp12 -> prPrec i 11 (concatD [doc (showString "#"), prt 12 exp12])
+    ESum _ exp12 -> prPrec i 11 (concatD [doc (showString "sum"), prt 12 exp12])
+    EProd _ exp12 -> prPrec i 11 (concatD [doc (showString "product"), prt 12 exp12])
+    ECard _ exp12 -> prPrec i 11 (concatD [doc (showString "#"), prt 12 exp12])
     EMinExp _ exp12 -> prPrec i 11 (concatD [doc (showString "-"), prt 12 exp12])
     EImpliesElse _ exp120 exp12 exp13 -> prPrec i 12 (concatD [doc (showString "if"), prt 12 exp120, doc (showString "then"), prt 12 exp12, doc (showString "else"), prt 13 exp13])
-    EInt _ posinteger -> prPrec i 13 (concatD [prt 0 posinteger])
-    EDouble _ posdouble -> prPrec i 13 (concatD [prt 0 posdouble])
-    EStr _ posstring -> prPrec i 13 (concatD [prt 0 posstring])
-    ESetExp _ setexp -> prPrec i 13 (concatD [prt 0 setexp])
+    EDomain _ exp13 exp14 -> prPrec i 13 (concatD [prt 13 exp13, doc (showString "<:"), prt 14 exp14])
+    ERange _ exp14 exp15 -> prPrec i 14 (concatD [prt 14 exp14, doc (showString ":>"), prt 15 exp15])
+    EUnion _ exp15 exp16 -> prPrec i 15 (concatD [prt 15 exp15, doc (showString "++"), prt 16 exp16])
+    EUnionCom _ exp15 exp16 -> prPrec i 15 (concatD [prt 15 exp15, doc (showString ","), prt 16 exp16])
+    EDifference _ exp16 exp17 -> prPrec i 16 (concatD [prt 16 exp16, doc (showString "--"), prt 17 exp17])
+    EIntersection _ exp17 exp18 -> prPrec i 17 (concatD [prt 17 exp17, doc (showString "**"), prt 18 exp18])
+    EJoin _ exp18 exp19 -> prPrec i 18 (concatD [prt 18 exp18, doc (showString "."), prt 19 exp19])
+    ClaferId _ name -> prPrec i 19 (concatD [prt 0 name])
+    EInt _ posinteger -> prPrec i 19 (concatD [prt 0 posinteger])
+    EDouble _ posdouble -> prPrec i 19 (concatD [prt 0 posdouble])
+    EReal _ posreal -> prPrec i 19 (concatD [prt 0 posreal])
+    EStr _ posstring -> prPrec i 19 (concatD [prt 0 posstring])
   prtList es = case es of
    [] -> (concatD [])
    x:xs -> (concatD [prt 0 x, prt 0 xs])
 
-instance Print SetExp where
-  prt i e = case e of
-    Union _ setexp setexp1 -> prPrec i 0 (concatD [prt 0 setexp, doc (showString "++"), prt 1 setexp1])
-    UnionCom _ setexp setexp1 -> prPrec i 0 (concatD [prt 0 setexp, doc (showString ","), prt 1 setexp1])
-    Difference _ setexp1 setexp2 -> prPrec i 1 (concatD [prt 1 setexp1, doc (showString "--"), prt 2 setexp2])
-    Intersection _ setexp2 setexp3 -> prPrec i 2 (concatD [prt 2 setexp2, doc (showString "**"), prt 3 setexp3])
-    Domain _ setexp3 setexp4 -> prPrec i 3 (concatD [prt 3 setexp3, doc (showString "<:"), prt 4 setexp4])
-    Range _ setexp4 setexp5 -> prPrec i 4 (concatD [prt 4 setexp4, doc (showString ":>"), prt 5 setexp5])
-    Join _ setexp5 setexp6 -> prPrec i 5 (concatD [prt 5 setexp5, doc (showString "."), prt 6 setexp6])
-    ClaferId _ name -> prPrec i 6 (concatD [prt 0 name])
-
 instance Print Decl where
   prt i e = case e of
-    Decl _ locids setexp -> prPrec i 0 (concatD [prt 0 locids, doc (showString ":"), prt 0 setexp])
+    Decl _ locids exp13 -> prPrec i 0 (concatD [prt 0 locids, doc (showString ":"), prt 13 exp13])
 
 instance Print Quant where
   prt i e = case e of
@@ -282,5 +282,3 @@   prtList es = case es of
    [x] -> (concatD [prt 0 x])
    x:xs -> (concatD [prt 0 x, doc (showString ";"), prt 0 xs])
-
-
src/Language/Clafer/Generator/Alloy.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE RankNTypes, FlexibleContexts #-}
 {-
- Copyright (C) 2012-2013 Kacper Bak, Jimmy Liang, Rafael Olaechea <http://gsd.uwaterloo.ca>
+ Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang, Michal Antkiewicz, Rafael Olaechea <http://gsd.uwaterloo.ca>
 
  Permission is hereby granted, free of charge, to any person obtaining a copy of
  this software and associated documentation files (the "Software"), to deal in
@@ -20,7 +20,7 @@  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  SOFTWARE.
 -}
--- | Generates Alloy4.1 or 4.2 code for a Clafer model
+-- | Generates Alloy4.2 code for a Clafer model
 module Language.Clafer.Generator.Alloy (genModule) where
 
 import Control.Applicative
@@ -44,8 +44,6 @@ 
 
 -- | Alloy code generation
--- 07th Mayo 2012 Rafael Olaechea
---      Added Logic to print a goal block in case there is at least one goal.
 genModule :: ClaferArgs -> (IModule, GEnv) -> [(UID, Integer)] -> (Result, [(Span, IrTrace)])
 genModule    claferargs'   (imodule, genv)    scopes            = (flatten output, filter ((/= NoTrace) . snd) $ mapLineCol output)
   where
@@ -56,50 +54,24 @@ 
   forScopes' = "for 1" ++ genScopes scopes
   genEnv = GenEnv claferargs' (uidClaferMap genv) forScopes'
-  output = header genEnv +++ (cconcat $ map (genDeclaration genEnv) (_mDecls imodule)) +++
-       if ((not $ skip_goals claferargs') && length goals_list > 0) then
-                CString "objectives o_global {\n" +++   (cintercalate (CString ",\n") goals_list) +++   CString "\n}"
-       else
-                CString ""
-       where
-                goals_list = filterNull (map (genDeclarationGoalsOnly genEnv) (_mDecls imodule))
+  output = header genEnv +++ (cconcat $ map (genDeclaration genEnv) (_mDecls imodule))
 
 header :: GenEnv -> Concat
 header    genEnv  = CString $ unlines
     [ "open util/integer"
     , "pred show {}"
-    , if (validate $ claferargs genEnv) ||  (noalloyruncommand $ claferargs genEnv)
+    , if (validate $ claferargs genEnv)
       then ""
       else "run show " ++ forScopes genEnv
     , ""]
 
-
 -- 07th Mayo 2012 Rafael Olaechea
--- Modified so that we can collect all goals into a single block as required per the way goals are handled in modified alloy.
-genDeclarationGoalsOnly :: GenEnv -> IElement -> Concat
-genDeclarationGoalsOnly    genEnv    x         = case x of
-  IEClafer _  -> CString ""
-  IEConstraint _ _  -> CString ""
-  IEGoal _ (PExp _ _ _ innerexp) -> case innerexp of
-        IFunExp op'  exps' ->  if  op' == iGMax || op' == iGMin then
-                        mkMetric op' $ genPExp genEnv [] (head exps')
-                else
-                        error "unary operator  distinct from (min/max) at the topmost level of a goal element"
-        _ ->  error "no unary operator (min/max) at the topmost level of a goal element."
-
--- 07th Mayo 2012 Rafael Olaechea
--- Removed goal from this function as they will now  all be collected into a single block.
 genDeclaration :: GenEnv -> IElement -> Concat
 genDeclaration genEnv x = case x of
   IEClafer clafer'  -> (genClafer genEnv [] clafer') +++ (mkFact $ cconcat $ genSetUniquenessConstraint clafer')
   IEConstraint True pexp  -> mkFact $ genPExp genEnv [] pexp
   IEConstraint False pexp  -> mkAssert genEnv (genAssertName pexp) $ genPExp genEnv [] pexp
-  IEGoal _ (PExp _ _ _ innerexp) -> case innerexp of
-        IFunExp op'  _ ->  if  op' == iGMax || op' == iGMin then
-                       CString ""
-                else
-                        error "unary operator  distinct from (min/max) at the topmost level of a goal element"
-        _ ->  error "no unary operator (min/max) at the topmost level of a goal element."
+  IEGoal _ _ -> CString ""
 
 mkFact :: Concat -> Concat
 mkFact x@(CString "") = x
@@ -119,9 +91,6 @@   , CString "\n\n"
   ]
 
-mkMetric :: String -> Concat -> Concat
-mkMetric goalopname xs = cconcat [ if goalopname == iGMax then CString "maximize" else  CString "minimize", CString " ", xs, CString " "]
-
 mkSet :: Concat -> Concat
 mkSet xs = cconcat [CString "{ ", xs, CString " }"]
 
@@ -163,12 +132,11 @@ claferDecl :: IClafer -> Concat -> Concat
 claferDecl    c     rest    = cconcat
   [ genOptCard c
-  , CString $ genAbstract $ _isAbstract c
+  , CString $ if _isAbstract c then "abstract " else ""
   , CString "sig "
   , Concat NoTrace [CString $ _uid c, genExtends $ _super c, CString "\n", rest]
   ]
   where
-  genAbstract isAbs = if isAbs then "abstract " else ""
   genExtends Nothing = CString ""
   genExtends (Just (PExp _ _ _ (IClaferId _ i _ _))) = CString " " +++ Concat NoTrace [CString $ "extends " ++ i]
   -- todo: handle multiple inheritance
@@ -192,7 +160,7 @@   where
   r = if isJust $ _reference c
                 then
-                        Just $ Concat NoTrace [CString $ genRel (if (noalloyruncommand $ claferargs genEnv) then  (_uid c ++ "_ref") else "ref")
+                        Just $ Concat NoTrace [CString $ genRel (genRefName $ _uid c)
                          c {_card = Just (1, 1)} $
                          flatten $ refType genEnv c]
                 else
@@ -202,6 +170,9 @@ genRelName :: String -> String
 genRelName name = "r_" ++ name
 
+genRefName :: String -> String
+genRefName name = name ++ "_ref"
+
 genRel :: String -> IClafer -> String -> String
 genRel name c rType = genAlloyRel name (genCardCrude $ _card c) rType'
   where
@@ -211,7 +182,7 @@ genAlloyRel name card' rType = concat [name, " : ", card', " ", rType]
 
 refType :: GenEnv -> IClafer -> Concat
-refType    genEnv c = fromMaybe (CString "") $ fmap ((genType genEnv).getTarget) $ _ref <$> _reference c
+refType    genEnv c = fromMaybe (CString "") (((genType genEnv).getTarget) <$> (_ref <$> _reference c))
 
 
 getTarget :: PExp -> PExp
@@ -233,6 +204,7 @@ genConstraints    genEnv    resPath c
   = (genParentConst resPath c)
   : (genGroupConst genEnv c)
+  : (genRefSubrelationConstriant (uidIClaferMap genEnv) c)
 {- genPathConst produces incorrect code for top-level clafers
 
 abstract System
@@ -251,7 +223,7 @@ -}
   : constraints
   where
-  constraints = concat $ map genConst $ _elements c
+  constraints = concatMap genConst $ _elements c
   genConst x = case x of
     IEConstraint True pexp  -> [ genPExp genEnv ((_uid c) : resPath) pexp ]
     IEConstraint False pexp  -> [ CString "// Assertion " +++ (genAssertName pexp) +++ CString " ignored since nested assertions are not supported in Alloy.\n"]
@@ -262,7 +234,7 @@         )
         : (genParentSubrelationConstriant (uidIClaferMap genEnv) c')
         : (genSetUniquenessConstraint c')
-    IEGoal _ _ -> error "getConst function from Alloy generator was given a Goal, this function should only be given a Constrain or Clafer" -- This should never happen
+    IEGoal _ _ -> error "[bug] Alloy.getConst: should not be given a goal." -- This should never happen
 
 
 genSetUniquenessConstraint :: IClafer -> [Concat]
@@ -275,7 +247,7 @@                         (case isTopLevel c of
                           False -> "all disj x, y : this.@" ++ (genRelName $ _uid c)
                           True  -> " all disj x, y : "       ++ (_uid c)))
-                      ++ " | (x.@ref) != (y.@ref) "
+                      ++ " | (x.@" ++ genRefName (_uid c) ++ ") != (y.@" ++ genRefName (_uid c) ++ ") "
                    ]
               else []
             _ -> [])
@@ -283,7 +255,7 @@     )
 
 genParentSubrelationConstriant :: UIDIClaferMap -> IClafer   -> Concat
-genParentSubrelationConstriant    uidIClaferMap'        headClafer =
+genParentSubrelationConstriant    uidIClaferMap'   headClafer =
   case match of
     Nothing -> CString ""
     Just NestedInheritanceMatch {
@@ -298,6 +270,28 @@   where
     match = matchNestedInheritance uidIClaferMap' headClafer
 
+-- See Common.NestedInheritanceMatch
+genRefSubrelationConstriant :: UIDIClaferMap -> IClafer   -> Concat
+genRefSubrelationConstriant    uidIClaferMap'   headClafer =
+  if isJust $ _reference headClafer
+  then
+    case match of
+      Nothing -> CString ""
+      Just NestedInheritanceMatch
+        { _superClafer = superClafer
+        ,  _superClafersTarget = superClafersTarget
+        }  -> case (isProperRefinement uidIClaferMap' match, not $ null superClafersTarget) of
+                 ((True, True, True), True) -> CString $ concat
+                  [ genRefName $ _uid headClafer
+                  , " in "
+                  , genRefName $ _uid superClafer
+                  ]
+                 _ -> CString ""
+  else CString ""
+  where
+    match = matchNestedInheritance uidIClaferMap' headClafer
+
+
 -- optimization: if only boolean features then the parent is unique
 genParentConst :: [String] -> IClafer -> Concat
 genParentConst [] _     = CString ""
@@ -423,32 +417,39 @@ genPExp'    genEnv    resPath     (PExp iType' pid' pos exp') = case exp' of
   IDeclPExp q d pexp -> Concat (IrPExp pid') $
     [ CString $ genQuant q, CString " "
-    , cintercalate (CString ", ") $ map ((genDecl genEnv resPath)) d
+    , cintercalate (CString ", ") $ map (genDecl genEnv resPath) d
     , CString $ optBar d, genPExp' genEnv resPath pexp]
     where
     optBar [] = ""
     optBar _  = " | "
-  IClaferId _ "ref" _ _ -> CString "@ref"
+  IClaferId _ "integer" _ _ -> CString "Int"
+  IClaferId _ "int" _ _ -> CString "Int"
+  IClaferId _ "string" _ _ -> CString "Int"
+  IClaferId _ "ref" _ _ -> CString $ "@"  ++ getTClaferUID iType' ++ "_ref"
+    where
+      getTClaferUID (Just TMap{_so = TClafer{_hi = [u]}}) = u
+      getTClaferUID (Just TMap{_so = TClafer{_hi = (u:_)}}) = u
+      getTClaferUID t = error $ "[bug] Alloy.genPExp'.getTClaferUID: unknown type: " ++ show t
   IClaferId _ sid istop _ -> CString $
-      if head sid == '~' then sid else
-      if isNothing iType' then sid' else case fromJust $ iType' of
-    TInteger -> vsident
-    TReal -> vsident
-    TString -> vsident
-    _ -> sid'
+      if head sid == '~'
+        then sid
+        else case iType' of
+          Just TInteger -> vsident
+          Just TDouble -> vsident
+          Just TReal -> vsident
+          Just TString -> vsident
+          _ -> sid'
     where
     sid' = (if istop then "" else '@' : genRelName "") ++ sid
-    -- 29/March/2012  Rafael Olaechea: ref is now prepended with clafer name to be able to refer to it from partial instances.
-    -- 30/March/2012 Rafael Olaechea added referredClaferUniqeuid to fix problems when having this.x > number  (e.g test/positive/i10.cfr )
-    vsident = if (noalloyruncommand $ claferargs genEnv) then sid' ++  ".@"  ++ referredClaferUniqeuid ++ "_ref"  else  sid'  ++ ".@ref"
-        where referredClaferUniqeuid = if sid == "this" then (head resPath) else sid
+    vsident = sid' ++  ".@"  ++ genRefName (if sid == "this" then head resPath else sid)
   IFunExp _ _ -> case exp'' of
     IFunExp _ _ -> genIFunExp pid' genEnv resPath exp''
     _ -> genPExp' genEnv resPath $ PExp iType' pid' pos exp''
     where
     exp'' = transformExp exp'
   IInt n -> CString $ show n
-  IDouble _ -> error "no real numbers allowed"
+  IDouble _ -> error "no double numbers allowed"
+  IReal _ -> error "no real numbers allowed"
   IStr _ -> error "no strings allowed"
 
 
@@ -472,22 +473,22 @@   if (op' == iSumSet)
     then genIFunExp pid' genEnv resPath (IFunExp iSumSet' [(removeright (head exps')), (getRight $ head exps')])
     else if (op' == iSumSet')
-      then Concat (IrPExp pid') $ intl exps'' (map CString $ genOp (Alloy42 `elem` (mode $ claferargs genEnv)) iSumSet)
-      else Concat (IrPExp pid') $ intl exps'' (map CString $ genOp (Alloy42 `elem` (mode $ claferargs genEnv)) op')
+      then Concat (IrPExp pid') $ intl exps'' (map CString $ genOp iSumSet)
+      else Concat (IrPExp pid') $ intl exps'' (map CString $ genOp op')
   where
   intl
-    | op' == iSumSet' = flip $ interleave
+    | op' == iSumSet' = flip interleave
     | op' `elem` arithBinOps && length exps' == 2 = interleave
     | otherwise = \xs ys -> reverse $ interleave (reverse xs) (reverse ys)
   exps'' = map (optBrArg genEnv resPath) exps'
-genIFunExp _ _ _ _ = error "Function genIFunExp from Alloy Generator expected a IFunExp as an argument but was given something else" --This should never happen
+genIFunExp _ _ _ x = error $ "[bug] Alloy.genIFunExp: expecting a IFunExp, instead got: " ++ show x--This should never happen
 
 
 optBrArg :: GenEnv -> [String] -> PExp -> Concat
 optBrArg    genEnv    resPath     x     = brFun (genPExp' genEnv resPath) x
   where
   brFun = case x of
-    PExp _ _ _ (IClaferId _ _ _ _) -> ($)
+    PExp _ _ _ IClaferId{} -> ($)
     PExp _ _ _ (IInt _) -> ($)
     _  -> brArg
 
@@ -500,13 +501,10 @@ brArg :: (a -> Concat) -> a -> Concat
 brArg f arg = cconcat [CString "(", f arg, CString ")"]
 
---     isAlloy42
-genOp :: Bool -> String -> [String]
-genOp    True       op'
+genOp :: String -> [String]
+genOp    op'
   | op' == iPlus = [".plus[", "]"]
   | op' == iSub  = [".minus[", "]"]
-  | otherwise   = genOp False op'
-genOp    _             op'
   | op' == iSumSet = ["sum temp : "," | temp."]
   | op' == iProdSet = ["prod temp : "," | temp."]
   | op' `elem` unOps  = [op']
@@ -523,7 +521,7 @@   | op' == iRange = [" :> "]
   | op' == iJoin = ["."]
   | op' == iIfThenElse = [" => ", " else "]
-genOp _ _ = error "This should never happen"
+genOp op' = error $ "[bug] Alloy.genOp: Unmatched operator: " ++ op'
 
 -- adjust parent
 adjustPExp :: [String] -> PExp -> PExp
@@ -536,7 +534,7 @@     where
     (adjNav, adjExps) = if op' == iJoin then (aNav, id)
                         else (id, adjustPExp resPath)
-  IClaferId _ _ _ _ -> aNav x
+  IClaferId{} -> aNav x
   _  -> x
   where
   aNav = fst.(adjustNav resPath)
@@ -571,9 +569,8 @@ 
 
 genDisj :: Bool -> String
-genDisj    x     = case x of
-  False -> ""
-  True  -> "disj"
+genDisj    True  = "disj"
+genDisj    False = ""
 
 -- mapping line/columns between Clafer and Alloy code
 
@@ -638,9 +635,12 @@ firstLine = 1 :: LineNo
 
 removeright :: PExp -> PExp
-removeright (PExp _ _ _ (IFunExp _ (x : (PExp _ _ _ (IClaferId _ _ _ _)) : _))) = x
-removeright (PExp t id' pos (IFunExp o (x1:x2:xs))) = (PExp t id' pos (IFunExp o (x1:(removeright x2):xs)))
-removeright (PExp _ _ _ _) = error "Function removeright from the AlloyGenerator expects a PExp with a IFunExp inside, was given something else" --This should never happen
+removeright (PExp _ _ _ (IFunExp _ (x : (PExp _ _ _ IClaferId{}) : _))) = x
+removeright (PExp _ _ _ (IFunExp _ (x : (PExp _ _ _ (IInt _ )) : _))) = x
+removeright (PExp _ _ _ (IFunExp _ (x : (PExp _ _ _ (IStr _ )) : _))) = x
+removeright (PExp _ _ _ (IFunExp _ (x : (PExp _ _ _ (IDouble _ )) : _))) = x
+removeright (PExp t id' pos (IFunExp o (x1:x2:xs))) = PExp t id' pos (IFunExp o (x1:(removeright x2):xs))
+removeright x@PExp{} = error $ "[bug] AlloyGenerator.removeright: expects a PExp with a IFunExp inside but was given: " ++ show x --This should never happen
 
 getRight :: PExp -> PExp
 getRight (PExp _ _ _ (IFunExp _ (_:x:_))) = getRight x
src/Language/Clafer/Generator/Choco.hs view
@@ -185,7 +185,9 @@     genConstraintExp (IFunExp "sum" args')
         | [arg] <- args', PExp{_exp = IFunExp{_exps = [a, PExp{_exp = IClaferId{_sident = "ref"}}]}} <- rewrite arg =
             "sum(" ++ genConstraintPExp a ++ ")"
-        | otherwise = error "Choco: Unexpected sum argument."
+        | [arg] <- args' =
+            "sum(" ++ genConstraintPExp arg ++ ")"
+        | otherwise = error $ "[bug] Choco.genConstraintExp: Unexpected sum argument: " ++ show args'
     genConstraintExp (IFunExp "product" args')
         | [arg] <- args', PExp{_exp = IFunExp{_exps = [a, PExp{_exp = IClaferId{_sident = "ref"}}]}} <- rewrite arg =
             "product(" ++ genConstraintPExp a ++ ")"
@@ -203,6 +205,7 @@     genConstraintExp (IInt val) = "constant(" ++ show val ++ ")"
     genConstraintExp (IStr val) = "constant(" ++ show val ++ ")"
     genConstraintExp (IDouble val) = "constant(" ++ show val ++ ")"
+    genConstraintExp (IReal val) = "constant(" ++ show val ++ ")"
 
     mapQuant INo = "none"
     mapQuant ISome = "some"
src/Language/Clafer/Generator/Concat.hs view
@@ -1,5 +1,5 @@ {-
- Copyright (C) 2012-2013 Kacper Bak <http://gsd.uwaterloo.ca>
+ Copyright (C) 2012-2015 Kacper Bak <http://gsd.uwaterloo.ca>
 
  Permission is hereby granted, free of charge, to any person obtaining a copy of
  this software and associated documentation files (the "Software"), to deal in
src/Language/Clafer/Generator/Graph.hs view
@@ -137,14 +137,14 @@ graphSimpleSuper (SuperEmpty _) _ _ _ = ""
 graphSimpleSuper (SuperSome _ setExp) topLevel irMap _ =
   let
-    super' = parent $ graphSimpleSetExp setExp topLevel irMap
+    super' = parent $ graphSimpleExp setExp topLevel irMap
   in
     if super' == "error"
       then ""
       else "\"" ++
            fromJust (snd3 topLevel) ++
            "\" -> \"" ++
-           parent (graphSimpleSetExp setExp topLevel irMap) ++
+           parent (graphSimpleExp setExp topLevel irMap) ++
            "\"" ++
            " [" ++ if fst3 topLevel == True
              then "arrowhead=onormal constraint=true weight=100];\n"
@@ -153,9 +153,10 @@ graphSimpleReference :: Reference -> (Bool, Maybe String, Maybe String) -> Map.Map Span [Ir] -> Bool -> String
 graphSimpleReference (ReferenceEmpty _) _ _ _ = ""
 graphSimpleReference (ReferenceSet _ setExp) topLevel irMap showRefs =
-  case graphSimpleSetExp setExp topLevel irMap of
+  case graphSimpleExp setExp topLevel irMap of
     ["integer"] -> ""
     ["int"] -> ""
+    ["double"] -> ""
     ["real"] -> ""
     ["string"] -> ""
     [target] ->
@@ -173,10 +174,11 @@        "];\n"
     _ -> ""
 graphSimpleReference (ReferenceBag _ setExp) topLevel irMap showRefs =
-  case graphSimpleSetExp setExp topLevel irMap of
+  case graphSimpleExp setExp topLevel irMap of
     ["integer"] -> ""
     ["int"] -> ""
     ["real"] -> ""
+    ["double"] -> ""
     ["string"] -> ""
     [target] ->
       ("\"" ++
@@ -212,21 +214,22 @@ graphSimpleExp _ _ _ = ""
 graphSimpleQuant _ _ _ = ""
 graphSimpleGoal _ _ _ = ""
-graphSimpleSoftConstraint _ _ _ = ""
+graphSimpleAssertion _ _ _ = ""
 graphSimpleAbstract _ _ _ = ""
 graphSimpleGCard _ _ _ = ""
 graphSimpleNCard _ _ _ = ""
 graphSimpleExInteger _ _ _ = ""-}
 
-graphSimpleSetExp :: SetExp -> (Bool, Maybe String, Maybe String) -> Map.Map Span [Ir] -> [String]
-graphSimpleSetExp (ClaferId _ name) topLevel irMap = [graphSimpleName name topLevel irMap]
-graphSimpleSetExp (Union _ set1 set2) topLevel irMap = graphSimpleSetExp set1 topLevel irMap ++ graphSimpleSetExp set2 topLevel irMap
-graphSimpleSetExp (UnionCom _ set1 set2) topLevel irMap = graphSimpleSetExp set1 topLevel irMap ++ graphSimpleSetExp set2 topLevel irMap
-graphSimpleSetExp (Difference _ set1 set2) topLevel irMap = graphSimpleSetExp set1 topLevel irMap ++ graphSimpleSetExp set2 topLevel irMap
-graphSimpleSetExp (Intersection _ set1 set2) topLevel irMap = graphSimpleSetExp set1 topLevel irMap ++ graphSimpleSetExp set2 topLevel irMap
-graphSimpleSetExp (Domain _ set1 set2) topLevel irMap = graphSimpleSetExp set1 topLevel irMap ++ graphSimpleSetExp set2 topLevel irMap
-graphSimpleSetExp (Range _ set1 set2) topLevel irMap = graphSimpleSetExp set1 topLevel irMap ++ graphSimpleSetExp set2 topLevel irMap
-graphSimpleSetExp (Join _ set1 set2) topLevel irMap = graphSimpleSetExp set1 topLevel irMap ++ graphSimpleSetExp set2 topLevel irMap
+graphSimpleExp :: Exp -> (Bool, Maybe String, Maybe String) -> Map.Map Span [Ir] -> [String]
+graphSimpleExp (ClaferId _ name) topLevel irMap = [graphSimpleName name topLevel irMap]
+graphSimpleExp (EUnion _ set1 set2) topLevel irMap = graphSimpleExp set1 topLevel irMap ++ graphSimpleExp set2 topLevel irMap
+graphSimpleExp (EUnionCom _ set1 set2) topLevel irMap = graphSimpleExp set1 topLevel irMap ++ graphSimpleExp set2 topLevel irMap
+graphSimpleExp (EDifference _ set1 set2) topLevel irMap = graphSimpleExp set1 topLevel irMap ++ graphSimpleExp set2 topLevel irMap
+graphSimpleExp (EIntersection _ set1 set2) topLevel irMap = graphSimpleExp set1 topLevel irMap ++ graphSimpleExp set2 topLevel irMap
+graphSimpleExp (EDomain _ set1 set2) topLevel irMap = graphSimpleExp set1 topLevel irMap ++ graphSimpleExp set2 topLevel irMap
+graphSimpleExp (ERange _ set1 set2) topLevel irMap = graphSimpleExp set1 topLevel irMap ++ graphSimpleExp set2 topLevel irMap
+graphSimpleExp (EJoin _ set1 set2) topLevel irMap = graphSimpleExp set1 topLevel irMap ++ graphSimpleExp set2 topLevel irMap
+graphSimpleExp _ _ _ = []
 
 {-graphSimpleEnumId :: EnumId -> (Bool, Maybe String, Maybe String) -> Map.Map Span [Ir] -> String
 graphSimpleEnumId (EnumIdIdent posident) _ irMap = graphSimplePosIdent posident irMap
@@ -248,7 +251,7 @@ graphCVLElement (ClaferUse s _ _ _) parent' irMap = if parent' == Nothing then "" else "?" ++ " -> " ++ getUseId s irMap ++ " [arrowhead = onormal style = dashed constraint = false];\n"
 graphCVLElement (Subconstraint _ constraint) parent' irMap = graphCVLConstraint constraint parent' irMap
 graphCVLElement (Subgoal _ constraint) parent' irMap = graphCVLGoal constraint parent' irMap
-graphCVLElement (Subsoftconstraint _ constraint) parent' irMap = graphCVLSoftConstraint constraint parent' irMap
+graphCVLElement (SubAssertion _ constraint) parent' irMap = graphCVLAssertion constraint parent' irMap
 
 graphCVLElements :: Elements -> Maybe String -> Map.Map Span [Ir] -> String
 graphCVLElements (ElementsEmpty _) _ _ = ""
@@ -269,12 +272,12 @@ 
 graphCVLSuper :: Super -> Maybe String -> Map.Map Span [Ir] -> String
 graphCVLSuper (SuperEmpty _) _ _ = ""
-graphCVLSuper (SuperSome _ setExp) parent' irMap = ":" ++ concat (graphCVLSetExp setExp parent' irMap)
+graphCVLSuper (SuperSome _ setExp) parent' irMap = ":" ++ concat (graphCVLExp setExp parent' irMap)
 
 graphCVLReference :: Reference -> Maybe String -> Map.Map Span [Ir] -> String
 graphCVLReference (ReferenceEmpty _) _ _ = ""
-graphCVLReference (ReferenceSet _ setExp) parent' irMap = "->" ++ concat (graphCVLSetExp setExp parent' irMap)
-graphCVLReference (ReferenceBag _ setExp) parent' irMap = "->>" ++ concat (graphCVLSetExp setExp parent' irMap)
+graphCVLReference (ReferenceSet _ setExp) parent' irMap = "->" ++ concat (graphCVLExp setExp parent' irMap)
+graphCVLReference (ReferenceBag _ setExp) parent' irMap = "->>" ++ concat (graphCVLExp setExp parent' irMap)
 
 graphCVLName :: Name -> Maybe String -> Map.Map Span [Ir] -> String
 graphCVLName (Path _ modids) parent' irMap = unwords $ map (\x -> graphCVLModId x parent' irMap) modids
@@ -291,8 +294,8 @@                                                                     in uid' ++ " [label=\"" ++ body' ++ "\" shape=parallelogram];\n" ++
                                                                       if parent' == Nothing then "" else uid' ++ " -> \"" ++ fromJust parent' ++ "\";\n"
 
-graphCVLSoftConstraint :: SoftConstraint -> Maybe String -> Map.Map Span [Ir] -> String
-graphCVLSoftConstraint (SoftConstraint s exps') parent' irMap = let body' = htmlChars $ genTooltip (Module s [ElementDecl s (Subsoftconstraint s (SoftConstraint s exps'))]) irMap;
+graphCVLAssertion :: Assertion -> Maybe String -> Map.Map Span [Ir] -> String
+graphCVLAssertion (Assertion s exps') parent' irMap = let body' = htmlChars $ genTooltip (Module s [ElementDecl s (SubAssertion s (Assertion s exps'))]) irMap;
                                                                        uid' = "\"" ++ getExpId s irMap ++ "\""
                                                                     in uid' ++ " [label=\"" ++ body' ++ "\" shape=parallelogram];\n" ++
                                                                       if parent' == Nothing then "" else uid' ++ " -> \"" ++ fromJust parent' ++ "\";\n"
@@ -333,18 +336,19 @@ graphCVLExp _ _ _ = ""
 graphCVLQuant _ _ _ = ""
 graphCVLGoal _ _ _ = ""
-graphCVLSoftConstraint _ _ _ = ""
+graphCVLAssertion _ _ _ = ""
 graphCVLAbstract _ _ _ = ""-}
 
-graphCVLSetExp :: SetExp -> Maybe String -> Map.Map Span [Ir] -> [String]
-graphCVLSetExp (ClaferId _ name) parent' irMap = [graphCVLName name parent' irMap]
-graphCVLSetExp (Union _ set1 set2) parent' irMap = graphCVLSetExp set1 parent' irMap ++ graphCVLSetExp set2 parent' irMap
-graphCVLSetExp (UnionCom _ set1 set2) parent' irMap = graphCVLSetExp set1 parent' irMap ++ graphCVLSetExp set2 parent' irMap
-graphCVLSetExp (Difference _ set1 set2) parent' irMap = graphCVLSetExp set1 parent' irMap ++ graphCVLSetExp set2 parent' irMap
-graphCVLSetExp (Intersection _ set1 set2) parent' irMap = graphCVLSetExp set1 parent' irMap ++ graphCVLSetExp set2 parent' irMap
-graphCVLSetExp (Domain _ set1 set2) parent' irMap = graphCVLSetExp set1 parent' irMap ++ graphCVLSetExp set2 parent' irMap
-graphCVLSetExp (Range _ set1 set2) parent' irMap = graphCVLSetExp set1 parent' irMap ++ graphCVLSetExp set2 parent' irMap
-graphCVLSetExp (Join _ set1 set2) parent' irMap = graphCVLSetExp set1 parent' irMap ++ graphCVLSetExp set2 parent' irMap
+graphCVLExp :: Exp -> Maybe String -> Map.Map Span [Ir] -> [String]
+graphCVLExp (ClaferId _ name) parent' irMap = [graphCVLName name parent' irMap]
+graphCVLExp (EUnion _ set1 set2) parent' irMap = graphCVLExp set1 parent' irMap ++ graphCVLExp set2 parent' irMap
+graphCVLExp (EUnionCom _ set1 set2) parent' irMap = graphCVLExp set1 parent' irMap ++ graphCVLExp set2 parent' irMap
+graphCVLExp (EDifference _ set1 set2) parent' irMap = graphCVLExp set1 parent' irMap ++ graphCVLExp set2 parent' irMap
+graphCVLExp (EIntersection _ set1 set2) parent' irMap = graphCVLExp set1 parent' irMap ++ graphCVLExp set2 parent' irMap
+graphCVLExp (EDomain _ set1 set2) parent' irMap = graphCVLExp set1 parent' irMap ++ graphCVLExp set2 parent' irMap
+graphCVLExp (ERange _ set1 set2) parent' irMap = graphCVLExp set1 parent' irMap ++ graphCVLExp set2 parent' irMap
+graphCVLExp (EJoin _ set1 set2) parent' irMap = graphCVLExp set1 parent' irMap ++ graphCVLExp set2 parent' irMap
+graphCVLExp _ _ _ = []
 
 {-graphCVLEnumId (EnumIdIdent posident) _ irMap = graphCVLPosIdent posident irMap
 graphCVLEnumId (PosEnumIdIdent _ posident) parent irMap = graphCVLEnumId (EnumIdIdent posident) parent irMap-}
@@ -388,12 +392,6 @@                       then "Uid not Found"
                       else let IRClafer iClaf = head $ fromJust $ Map.lookup s irMap in
                         _uid iClaf
-
-{-getSuperId :: Span -> Map.Map Span [Ir] -> String
-getSuperId s irMap = if Map.lookup s irMap == Nothing
-                        then "Uid not Found"
-                        else let IRPExp pexp = head $ fromJust $ Map.lookup s irMap in
-                          sident $ exp pexp-}
 
 getUseId :: Span -> Map.Map Span [Ir] -> String
 getUseId s irMap = if Map.lookup s irMap == Nothing
src/Language/Clafer/Generator/Html.hs view
@@ -157,7 +157,7 @@     (comments', preComments) = printPreComment s comments;
     (comments'', comment) = printComment s comments'
 
-printElement (Subsoftconstraint s constraint) indent irMap html comments =
+printElement (SubAssertion s constraint) indent irMap html comments =
     preComments ++
     printIndent indent html ++
     printAssertion constraint indent irMap html comments'' ++
@@ -179,7 +179,7 @@           span' (Subconstraint s _) = s
           span' (ClaferUse s _ _ _) = s
           span' (Subgoal s _) = s
-          span' (Subsoftconstraint s _) = s
+          span' (SubAssertion s _) = s
 
 printClafer :: Clafer -> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String
 printClafer (Clafer s abstract gCard id' super' reference' crd init' es) indent irMap html comments =
@@ -245,12 +245,12 @@ 
 printSuper :: Super -> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String
 printSuper (SuperEmpty _) _ _ _ _ = ""
-printSuper (SuperSome _ setExp) indent irMap html comments = (while html "<span class=\"keyword\">") ++ " : " ++ (while html "</span>") ++ printSetExp setExp indent irMap html comments
+printSuper (SuperSome _ setExp) indent irMap html comments = (while html "<span class=\"keyword\">") ++ " : " ++ (while html "</span>") ++ printExp setExp indent irMap html comments
 
 printReference :: Reference -> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String
 printReference (ReferenceEmpty _) _ _ _ _ = ""
-printReference (ReferenceSet _ setExp) indent irMap html comments = (while html "<span class=\"keyword\">") ++ " -> " ++ (while html "</span>") ++ printSetExp setExp indent irMap html comments
-printReference (ReferenceBag _ setExp) indent irMap html comments = (while html "<span class=\"keyword\">") ++ " ->> " ++ (while html "</span>") ++ printSetExp setExp indent irMap html comments
+printReference (ReferenceSet _ setExp) indent irMap html comments = (while html "<span class=\"keyword\">") ++ " -> " ++ (while html "</span>") ++ printExp setExp indent irMap html comments
+printReference (ReferenceBag _ setExp) indent irMap html comments = (while html "<span class=\"keyword\">") ++ " ->> " ++ (while html "</span>") ++ printExp setExp indent irMap html comments
 
 
 printCard :: Card -> String
@@ -272,8 +272,8 @@     " " ++
     while html "<span class=\"keyword\">" ++ "]" ++ while html "</span>"
 
-printAssertion :: SoftConstraint -> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String
-printAssertion (SoftConstraint _ exps') indent irMap html comments = concatMap (\x -> printAssertion' x indent irMap html comments) exps'
+printAssertion :: Assertion -> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String
+printAssertion (Assertion _ exps') indent irMap html comments = concatMap (\x -> printAssertion' x indent irMap html comments) exps'
 printAssertion' :: Exp -> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String
 printAssertion' exp' indent' irMap html comments =
     while html "<span class=\"keyword\">" ++ "assert [" ++ while html "</span>" ++
@@ -285,7 +285,7 @@ printDecl :: Decl-> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String
 printDecl (Decl _ locids setExp) indent irMap html comments =
   (concat $ intersperse "; " $ map printLocId locids) ++
-  (while html "<span class=\"keyword\">") ++ " : " ++ (while html "</span>") ++ printSetExp setExp indent irMap html comments
+  (while html "<span class=\"keyword\">") ++ " : " ++ (while html "</span>") ++ printExp setExp indent irMap html comments
   where
     printLocId :: LocId -> String
     printLocId (LocIdIdent _ (PosIdent (_, ident'))) = ident'
@@ -299,15 +299,14 @@ printInitHow (InitDefault _) = " := "
 
 printExp :: Exp -> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String
-printExp (DeclAllDisj _ decl exp') indent irMap html comments = "all disj " ++ (printDecl decl indent irMap html comments) ++ " | " ++ (printExp exp' indent irMap html comments)
-printExp (DeclAll _     decl exp') indent irMap html comments = "all " ++ (printDecl decl indent irMap html comments) ++ " | " ++ (printExp exp' indent irMap html comments)
-printExp (DeclQuantDisj _ quant' decl exp') indent irMap html comments = (printQuant quant' html) ++ "disj" ++ (printDecl decl indent irMap html comments) ++ " | " ++ (printExp exp' indent irMap html comments)
-printExp (DeclQuant _     quant' decl exp') indent irMap html comments = (printQuant quant' html) ++ (printDecl decl indent irMap html comments) ++ " | " ++ (printExp exp' indent irMap html comments)
+printExp (EDeclAllDisj _ decl exp') indent irMap html comments = "all disj " ++ (printDecl decl indent irMap html comments) ++ " | " ++ (printExp exp' indent irMap html comments)
+printExp (EDeclAll _     decl exp') indent irMap html comments = "all " ++ (printDecl decl indent irMap html comments) ++ " | " ++ (printExp exp' indent irMap html comments)
+printExp (EDeclQuantDisj _ quant' decl exp') indent irMap html comments = (printQuant quant' html) ++ "disj" ++ (printDecl decl indent irMap html comments) ++ " | " ++ (printExp exp' indent irMap html comments)
+printExp (EDeclQuant _     quant' decl exp') indent irMap html comments = (printQuant quant' html) ++ (printDecl decl indent irMap html comments) ++ " | " ++ (printExp exp' indent irMap html comments)
 printExp (EGMax _ exp')            indent irMap html comments = "max " ++ printExp exp' indent irMap html comments
 printExp (EGMin _ exp')            indent irMap html comments = "min " ++ printExp exp' indent irMap html comments
 printExp (ENeq _ exp'1 exp'2)       indent irMap html comments = (printExp exp'1 indent irMap html comments) ++ " != " ++ (printExp exp'2 indent irMap html comments)
-printExp (ESetExp _ setExp)       indent irMap html comments = printSetExp setExp indent irMap html comments
-printExp (QuantExp _ quant' exp')   indent irMap html comments = printQuant quant' html ++ printExp exp' indent irMap html comments
+printExp (EQuantExp _ quant' exp')   indent irMap html comments = printQuant quant' html ++ printExp exp' indent irMap html comments
 printExp (EImplies _ exp'1 exp'2)   indent irMap html comments = (printExp exp'1 indent irMap html comments) ++ (if html then " =&gt; " else " => ") ++ printExp exp'2 indent irMap html comments
 printExp (EAnd _ exp'1 exp'2)       indent irMap html comments = (printExp exp'1 indent irMap html comments) ++ (if html then " &amp;&amp; " else " && ")  ++ printExp exp'2 indent irMap html comments
 printExp (EOr _ exp'1 exp'2)        indent irMap html comments = (printExp exp'1 indent irMap html comments) ++ (if html then " &#124;&#124; " else " || ") ++ printExp exp'2 indent irMap html comments
@@ -326,25 +325,24 @@ printExp (EMul _ exp'1 exp'2)       indent irMap html comments = (printExp exp'1 indent irMap html comments) ++ " * " ++ printExp exp'2 indent irMap html comments
 printExp (EDiv _ exp'1 exp'2)       indent irMap html comments = (printExp exp'1 indent irMap html comments) ++ (if html then " &#47; " else " / ") ++ printExp exp'2 indent irMap html comments
 printExp (ERem _ exp'1 exp'2)       indent irMap html comments = (printExp exp'1 indent irMap html comments) ++ (if html then " &#37; " else " % ") ++ printExp exp'2 indent irMap html comments
-printExp (ESumSetExp _ exp')        indent irMap html comments = "sum " ++ printExp exp' indent irMap html comments
-printExp (EProdSetExp _ exp')       indent irMap html comments = "product " ++ printExp exp' indent irMap html comments
-printExp (ECSetExp _ exp')         indent irMap html comments = "# " ++ printExp exp' indent irMap html comments
+printExp (ESum _ exp')        indent irMap html comments = "sum " ++ printExp exp' indent irMap html comments
+printExp (EProd _ exp')       indent irMap html comments = "product " ++ printExp exp' indent irMap html comments
+printExp (ECard _ exp')         indent irMap html comments = "# " ++ printExp exp' indent irMap html comments
 printExp (EMinExp _ exp')          indent irMap html comments = "-" ++ printExp exp' indent irMap html comments
 printExp (EImpliesElse _ exp'1 exp'2 exp'3) indent irMap html comments = "if " ++ (printExp exp'1 indent irMap html comments) ++ " then " ++ (printExp exp'2 indent irMap html comments) ++ " else " ++ (printExp exp'3 indent irMap html comments)
+printExp (ClaferId _ name) indent irMap html comments = printName name indent irMap html comments
+printExp (EUnion _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ "++" ++ (printExp set2 indent irMap html comments)
+printExp (EUnionCom _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ ", " ++ (printExp set2 indent irMap html comments)
+printExp (EDifference _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ "--" ++ (printExp set2 indent irMap html comments)
+printExp (EIntersection _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ "&" ++ (printExp set2 indent irMap html comments)
+printExp (EDomain _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ "<:" ++ (printExp set2 indent irMap html comments)
+printExp (ERange _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ ":>" ++ (printExp set2 indent irMap html comments)
+printExp (EJoin _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ "." ++ (printExp set2 indent irMap html comments)
 printExp (EInt _ (PosInteger (_, num))) _ _ _ _ = num
 printExp (EDouble _ (PosDouble (_, num))) _ _ _ _ = num
+printExp (EReal _ (PosReal (_, num))) _ _ _ _ = num
 printExp (EStr _ (PosString (_, str))) _ _ _ _ = str
 
-printSetExp :: SetExp -> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String
-printSetExp (ClaferId _ name) indent irMap html comments = printName name indent irMap html comments
-printSetExp (Union _ set1 set2) indent irMap html comments = (printSetExp set1 indent irMap html comments) ++ "++" ++ (printSetExp set2 indent irMap html comments)
-printSetExp (UnionCom _ set1 set2) indent irMap html comments = (printSetExp set1 indent irMap html comments) ++ ", " ++ (printSetExp set2 indent irMap html comments)
-printSetExp (Difference _ set1 set2) indent irMap html comments = (printSetExp set1 indent irMap html comments) ++ "--" ++ (printSetExp set2 indent irMap html comments)
-printSetExp (Intersection _ set1 set2) indent irMap html comments = (printSetExp set1 indent irMap html comments) ++ "&" ++ (printSetExp set2 indent irMap html comments)
-printSetExp (Domain _ set1 set2) indent irMap html comments = (printSetExp set1 indent irMap html comments) ++ "<:" ++ (printSetExp set2 indent irMap html comments)
-printSetExp (Range _ set1 set2) indent irMap html comments = (printSetExp set1 indent irMap html comments) ++ ":>" ++ (printSetExp set2 indent irMap html comments)
-printSetExp (Join _ set1 set2) indent irMap html comments = (printSetExp set1 indent irMap html comments) ++ "." ++ (printSetExp set2 indent irMap html comments)
-
 printQuant :: Quant -> Bool -> String
 printQuant quant' html = case quant' of
   (QuantNo _)       -> (while html "<span class=\"keyword\">") ++ "no" ++ (while html "</span>") ++ " "
@@ -405,11 +403,6 @@                       then "Uid not Found"
                       else let IRClafer iClaf = head $ fromJust $ Map.lookup s irMap in
                         _uid iClaf
-
-{-getSuperId span irMap = if Map.lookup span irMap == Nothing
-                        then "Uid not Found"
-                        else let IRPExp pexp = head $ fromJust $ Map.lookup span irMap in
-                          sident $ exp pexp-}
 
 getUseId :: Span -> Map.Map Span [Ir] -> (String, String)
 getUseId s irMap = if Map.lookup s irMap == Nothing
src/Language/Clafer/Generator/Python.hs view
@@ -187,7 +187,9 @@     genConstraintExp (IFunExp "sum" args')
         | [arg] <- args', PExp{_exp = IFunExp{_exps = [a, PExp{_exp = IClaferId{_sident = "ref"}}]}} <- rewrite arg =
             "sum(" ++ genConstraintPExp a ++ ")"
-        | otherwise = error "Python: Unexpected sum argument."
+        | [arg] <- args' =
+            "sum(" ++ genConstraintPExp arg ++ ")"
+        | otherwise = error $ "[bug] Python.genConstraintExp: Unexpected sum argument: " ++ show args'
     genConstraintExp (IFunExp "product" args')
         | [arg] <- args', PExp{_exp = IFunExp{_exps = [a, PExp{_exp = IClaferId{_sident = "ref"}}]}} <- rewrite arg =
             "product(" ++ genConstraintPExp a ++ ")"
@@ -205,6 +207,7 @@     genConstraintExp (IInt val) = "constant(" ++ show val ++ ")"
     genConstraintExp (IStr val) = "constant(" ++ show val ++ ")"
     genConstraintExp (IDouble val) = "constant(" ++ show val ++ ")"
+    genConstraintExp (IReal val) = "constant(" ++ show val ++ ")"
 
     mapQuant INo = "none"
     mapQuant ISome = "some"
− src/Language/Clafer/Generator/Schema.hs
@@ -1,465 +0,0 @@-{-
- Copyright (C) 2012 Jimmy Liang <http://gsd.uwaterloo.ca>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy of
- this software and associated documentation files (the "Software"), to deal in
- the Software without restriction, including without limitation the rights to
- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
- of the Software, and to permit persons to whom the Software is furnished to do
- so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
--}
-module Language.Clafer.Generator.Schema where
-xsd :: String
-xsd = concat [ ""
-  , "<!-- ........................................................................ *\n"
-  , "  *   Clafer Project                                                          *\n"
-  , "  *   http://clafer.org                                                       *\n"
-  , "  *                                                                           *\n"
-  , "  *   File description: XML schema of Clafer intermediate representation (IR) *\n"
-  , "  *   Depends on: Haskell IR data types defined for clafer (Intclafer.hs)     *\n"
-  , "  *   Author: Leonardo Passos <lpassos@gsd.uwaterloo.ca>                      *\n"
-  , "  *   Contributors: Jimmy Liang <jliang@gsd.uwaterloo.ca>                     *\n"
-  , "  *                 Michal Antkiewicz <mantkiew@gsd.uwaterloo.ca>             *\n"
-  , "  *   Date: October 19th, 2011                                                *\n"
-  , "  *   Last update: February 4th, 2015                                         *\n"
-  , "  * ......................................................................... *\n"
-  , "  */\n"
-  , "-->\n"
-  , "<xs:schema targetNamespace=\"http://clafer.org/ir\"\n"
-  , "           elementFormDefault=\"qualified\"\n"
-  , "           xmlns=\"http://clafer.org/ir\"\n"
-  , "           xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"\n"
-  , "           xmlns:cl=\"http://clafer.org/ir\">\n"
-  , "\n"
-  , "  <!-- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-->\n"
-  , "  <!--\n"
-  , "data IType\n"
-  , "  = TBoolean\n"
-  , "  | TString\n"
-  , "  | TInteger\n"
-  , "  | TReal\n"
-  , "  | TClafer [UID]\n"
-  , "  -->\n"
-  , "  <xs:complexType name=\"IType\" abstract=\"true\"/>\n"
-  , "  <xs:element name=\"Type\" type=\"cl:IType\"/>\n"
-  , "\n"
-  , "  <xs:complexType name=\"IBoolean\">\n"
-  , "      <xs:complexContent>\n"
-  , "          <xs:extension base=\"cl:IType\"/>\n"
-  , "      </xs:complexContent>\n"
-  , "  </xs:complexType>\n"
-  , "\n"
-  , "  <xs:complexType name=\"IString\">\n"
-  , "      <xs:complexContent>\n"
-  , "          <xs:extension base=\"cl:IType\"/>\n"
-  , "      </xs:complexContent>\n"
-  , "  </xs:complexType>\n"
-  , "\n"
-  , "  <xs:complexType name=\"IInteger\">\n"
-  , "      <xs:complexContent>\n"
-  , "          <xs:extension base=\"cl:IType\"/>\n"
-  , "      </xs:complexContent>\n"
-  , "  </xs:complexType>\n"
-  , "\n"
-  , "  <xs:complexType name=\"IReal\">\n"
-  , "      <xs:complexContent>\n"
-  , "          <xs:extension base=\"cl:IType\"/>\n"
-  , "      </xs:complexContent>\n"
-  , "  </xs:complexType>\n"
-  , "\n"
-  , "  <xs:complexType name=\"ISet\">\n"
-  , "      <xs:complexContent>\n"
-  , "          <xs:extension base=\"cl:IType\"/>\n"
-  , "      </xs:complexContent>\n"
-  , "  </xs:complexType>\n"
-  , "\n"
-  , "  <!-- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-->\n"
-  , "  <!--\n"
-  , "data IModule\n"
-  , "  = IModule\n"
-  , "    { _mName :: String\n"
-  , "    , _mDecls :: [IElement]\n"
-  , "    }\n"
-  , "  -->\n"
-  , "\n"
-  , "  <xs:complexType name=\"IModule\">\n"
-  , "      <xs:sequence>\n"
-  , "          <xs:element name=\"Name\" type=\"xs:string\"/>\n"
-  , "          <xs:element ref=\"Declaration\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n"
-  , "      </xs:sequence>\n"
-  , "  </xs:complexType>\n"
-  , "\n"
-  , "  <xs:element name=\"Module\" type=\"cl:IModule\"/>\n"
-  , "\n"
-  , "  <!-- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-->\n"
-  , "  <!--\n"
-  , "data IClafer\n"
-  , "  = IClafer\n"
-  , "    { _cinPos :: Span\n"
-  , "    , _isAbstract :: Bool\n"
-  , "    , _gcard :: Maybe IGCard\n"
-  , "    , _ident :: CName\n"
-  , "    , _uid :: UID\n"
-  , "    , _parentUID :: UID\n"
-  , "    , _super :: Maybe PExp\n"
-  , "    , _reference :: Maybe IReference\n"
-  , "    , _card :: Maybe Interval\n"
-  , "    , _glCard :: Interval\n"
-  , "    , _elements :: [IElement]\n"
-  , "    }\n"
-  , "  -->\n"
-  , "  <xs:complexType name=\"IClafer\">\n"
-  , "      <xs:complexContent>\n"
-  , "          <xs:extension base=\"IElement\">\n"
-  , "            <xs:sequence>\n"
-  , "                <xs:element name=\"Position\">\n"
-  , "                  <xs:complexType>\n"
-  , "                      <xs:sequence>\n"
-  , "                          <xs:element name=\"Start\">\n"
-  , "                              <xs:complexType>\n"
-  , "                                  <xs:sequence>\n"
-  , "                                      <xs:element ref=\"IntLiteral\" minOccurs=\"2\" maxOccurs=\"2\"/>\n"
-  , "                                  </xs:sequence>\n"
-  , "                              </xs:complexType>\n"
-  , "                          </xs:element>\n"
-  , "                          <xs:element name=\"End\">\n"
-  , "                              <xs:complexType>\n"
-  , "                                  <xs:sequence>\n"
-  , "                                      <xs:element ref=\"IntLiteral\" minOccurs=\"2\" maxOccurs=\"2\"/>\n"
-  , "                                  </xs:sequence>\n"
-  , "                              </xs:complexType>\n"
-  , "                          </xs:element>\n"
-  , "                      </xs:sequence>\n"
-  , "                  </xs:complexType>\n"
-  , "                </xs:element>\n"
-  , "                <xs:element name=\"IsAbstract\" type=\"xs:boolean\"/>\n"
-  , "                <xs:element name=\"GroupCard\"  type=\"cl:IGroupCard\" minOccurs=\"0\" maxOccurs=\"1\"/>\n"
-  , "                <xs:element name=\"Id\"         type=\"xs:string\"/>\n"
-  , "                <xs:element name=\"UniqueId\"   type=\"xs:string\"/>\n"
-  , "                <xs:element name=\"ParentUniqueId\" type=\"xs:string\"/>\n"
-  , "                <xs:element name=\"Super\"      type=\"cl:IParentExp\" minOccurs=\"0\" maxOccurs=\"1\"/>\n"
-  , "                <xs:element name=\"Reference\"  type=\"cl:IReference\" minOccurs=\"0\" maxOccurs=\"1\"/>\n"
-  , "                <xs:element name=\"Card\"       type=\"cl:IInterval\" minOccurs=\"0\" maxOccurs=\"1\"/>\n"
-  , "                <xs:element name=\"GlobalCard\" type=\"cl:IInterval\"/>\n"
-  , "                <xs:element ref=\"Declaration\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n"
-  , "            </xs:sequence>\n"
-  , "          </xs:extension>\n"
-  , "      </xs:complexContent>\n"
-  , "  </xs:complexType>\n"
-  , "\n"
-  , "  <!-- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-->\n"
-  , "  <!--\n"
-  , "data IElement\n"
-  , "  = IEClafer\n"
-  , "    { _iClafer :: IClafer\n"
-  , "    }\n"
-  , "  | IEConstraint\n"
-  , "    { _isHard :: Bool\n"
-  , "    , _cpexp :: PExp\n"
-  , "    }\n"
-  , "  | IEGoal\n"
-  , "    { _isMaximize :: Bool\n"
-  , "    , _cpexp :: PExp\n"
-  , "    }\n"
-  , "   -->\n"
-  , "\n"
-  , "  <xs:complexType name=\"IElement\" abstract=\"true\"/>\n"
-  , "  <xs:element name=\"Declaration\" type=\"IElement\"/>\n"
-  , "\n"
-  , "  <!-- No need to create IEClafer type. IClafer is already a subtype\n"
-  , "       of IElement\n"
-  , "    -->\n"
-  , "\n"
-  , "  <xs:complexType name=\"IConstraint\">\n"
-  , "    <xs:complexContent>\n"
-  , "      <xs:extension base=\"cl:IElement\">\n"
-  , "          <xs:sequence>\n"
-  , "              <xs:element name=\"IsHard\"    type=\"xs:boolean\"/>\n"
-  , "              <xs:element name=\"ParentExp\" type=\"cl:IParentExp\"/>\n"
-  , "          </xs:sequence>\n"
-  , "      </xs:extension>\n"
-  , "\n"
-  , "    </xs:complexContent>\n"
-  , "  </xs:complexType>\n"
-  , "\n"
-  , "  <xs:complexType name=\"IGoal\">\n"
-  , "    <xs:complexContent>\n"
-  , "      <xs:extension base=\"cl:IElement\">\n"
-  , "          <xs:sequence>\n"
-  , "              <xs:element name=\"IsMaximize\" type=\"xs:boolean\"/>\n"
-  , "              <xs:element name=\"ParentExp\"  type=\"cl:IParentExp\"/>\n"
-  , "          </xs:sequence>\n"
-  , "      </xs:extension>\n"
-  , "\n"
-  , "    </xs:complexContent>\n"
-  , "  </xs:complexType>\n"
-  , "\n"
-  , "  <!-- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-->\n"
-  , "  <!--\n"
-  , "data IReference\n"
-  , "  = IReference\n"
-  , "    { _isSet :: Bool\n"
-  , "    , _ref :: PExp\n"
-  , "    }\n"
-  , "  -->\n"
-  , "  <xs:complexType name=\"IReference\">\n"
-  , "    <xs:sequence>\n"
-  , "        <xs:element name=\"IsSet\" type=\"xs:boolean\"/>\n"
-  , "        <xs:element name=\"Ref\"   type=\"cl:IParentExp\"/>\n"
-  , "    </xs:sequence>\n"
-  , "  </xs:complexType>\n"
-  , "\n"
-  , "  <!-- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-->\n"
-  , "  <!--\n"
-  , "data IGCard\n"
-  , "  = IGCard\n"
-  , "    { _isKeyword :: Bool\n"
-  , "    , _interval :: Interval\n"
-  , "    }\n"
-  , "  -->\n"
-  , "\n"
-  , "  <xs:complexType name=\"IGroupCard\">\n"
-  , "    <xs:sequence>\n"
-  , "        <xs:element name=\"IsKeyword\" type=\"xs:boolean\"/>\n"
-  , "        <xs:element name=\"Interval\"  type=\"cl:IInterval\"/>\n"
-  , "    </xs:sequence>\n"
-  , "  </xs:complexType>\n"
-  , "\n"
-  , "  <!-- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-->\n"
-  , "  <!-- type Interval = (Integer, ExInteger) -->\n"
-  , "\n"
-  , "  <xs:complexType name=\"IInterval\">\n"
-  , "      <xs:sequence>\n"
-  , "          <xs:element name=\"Min\">\n"
-  , "            <xs:complexType>\n"
-  , "                <xs:sequence>\n"
-  , "                    <xs:element ref=\"IntLiteral\"/>\n"
-  , "                </xs:sequence>\n"
-  , "            </xs:complexType>\n"
-  , "          </xs:element>\n"
-  , "          <xs:element name=\"Max\">\n"
-  , "            <xs:complexType>\n"
-  , "                <xs:sequence>\n"
-  , "                    <xs:element ref=\"IntLiteral\"/>\n"
-  , "                </xs:sequence>\n"
-  , "            </xs:complexType>\n"
-  , "          </xs:element>\n"
-  , "      </xs:sequence>\n"
-  , "  </xs:complexType>\n"
-  , "\n"
-  , "  <!-- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-->\n"
-  , "  <!--\n"
-  , "data PExp\n"
-  , "  = PExp\n"
-  , "    { _iType :: Maybe IType\n"
-  , "    , _pid :: String\n"
-  , "    , _inPos :: Span\n"
-  , "    , _exp :: IExp\n"
-  , "    }\n"
-  , "  -->\n"
-  , "\n"
-  , "  <xs:complexType name=\"IParentExp\">\n"
-  , "      <xs:sequence>\n"
-  , "          <xs:element name=\"Type\"     type=\"cl:IType\" minOccurs=\"0\" maxOccurs=\"1\"/>\n"
-  , "          <xs:element name=\"ParentId\" type=\"xs:string\" minOccurs=\"0\" maxOccurs=\"1\"/>\n"
-  , "          <xs:element name=\"Position\">\n"
-  , "              <xs:complexType>\n"
-  , "                  <xs:sequence>\n"
-  , "                      <xs:element name=\"Start\">\n"
-  , "                          <xs:complexType>\n"
-  , "                              <xs:sequence>\n"
-  , "                                  <xs:element ref=\"IntLiteral\" minOccurs=\"2\" maxOccurs=\"2\"/>\n"
-  , "                              </xs:sequence>\n"
-  , "                          </xs:complexType>\n"
-  , "                      </xs:element>\n"
-  , "                      <xs:element name=\"End\">\n"
-  , "                          <xs:complexType>\n"
-  , "                              <xs:sequence>\n"
-  , "                                  <xs:element ref=\"IntLiteral\" minOccurs=\"2\" maxOccurs=\"2\"/>\n"
-  , "                              </xs:sequence>\n"
-  , "                          </xs:complexType>\n"
-  , "                      </xs:element>\n"
-  , "                  </xs:sequence>\n"
-  , "              </xs:complexType>\n"
-  , "          </xs:element>\n"
-  , "          <xs:element name=\"Exp\"      type=\"cl:IExp\"/>\n"
-  , "      </xs:sequence>\n"
-  , "  </xs:complexType>\n"
-  , "\n"
-  , "\n"
-  , "  <!-- ......................................................................-->\n"
-  , "  <!--\n"
-  , "data IExp\n"
-  , "  = IDeclPExp\n"
-  , "    { _quant :: IQuant\n"
-  , "    , _oDecls :: [IDecl]\n"
-  , "    , _bpexp :: PExp\n"
-  , "    }\n"
-  , "  | IFunExp\n"
-  , "    { _op :: String\n"
-  , "    , _exps :: [PExp]\n"
-  , "    }\n"
-  , "  | IInt\n"
-  , "    { _iint :: Integer\n"
-  , "    }\n"
-  , "  | IDouble\n"
-  , "    { _idouble :: Double\n"
-  , "    }\n"
-  , "  | IStr\n"
-  , "    { _istr :: String\n"
-  , "    }\n"
-  , "  | IClaferId\n"
-  , "    { _modName :: String\n"
-  , "    , _sident :: CName\n"
-  , "    , _isTop :: Bool\n"
-  , "    , _binding :: ClaferBinding\n"
-  , "    }\n"
-  , "   -->\n"
-  , "  <xs:complexType name=\"IExp\" abstract=\"true\"/>\n"
-  , "\n"
-  , "  <xs:complexType name=\"IDeclarationParentExp\">\n"
-  , "      <xs:complexContent>\n"
-  , "          <xs:extension base=\"cl:IExp\">\n"
-  , "              <xs:sequence>\n"
-  , "                  <xs:element name=\"Quantifier\"    type=\"cl:IQuantifier\"/>\n"
-  , "                  <xs:element name=\"Declaration\"   type=\"cl:IDeclaration\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n"
-  , "                  <xs:element name=\"BodyParentExp\" type=\"cl:IParentExp\"/>\n"
-  , "              </xs:sequence>\n"
-  , "          </xs:extension>\n"
-  , "      </xs:complexContent>\n"
-  , "  </xs:complexType>\n"
-  , "\n"
-  , "  <xs:complexType name=\"IFunctionExp\">\n"
-  , "      <xs:complexContent>\n"
-  , "          <xs:extension base=\"IExp\">\n"
-  , "              <xs:sequence>\n"
-  , "                  <xs:element name=\"Operation\" type=\"xs:string\"/>\n"
-  , "                  <xs:element name=\"Argument\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"IParentExp\"/>\n"
-  , "              </xs:sequence>\n"
-  , "          </xs:extension>\n"
-  , "      </xs:complexContent>\n"
-  , "  </xs:complexType>\n"
-  , "\n"
-  , "  <xs:complexType name=\"IIntExp\">\n"
-  , "      <xs:complexContent>\n"
-  , "          <xs:extension base=\"IExp\">\n"
-  , "              <xs:sequence>\n"
-  , "                 <xs:element ref=\"IntLiteral\"/>\n"
-  , "              </xs:sequence>\n"
-  , "          </xs:extension>\n"
-  , "      </xs:complexContent>\n"
-  , "  </xs:complexType>\n"
-  , "\n"
-  , "  <xs:complexType name=\"IDoubleExp\">\n"
-  , "      <xs:complexContent>\n"
-  , "          <xs:extension base=\"IExp\">\n"
-  , "              <xs:sequence>\n"
-  , "                 <xs:element ref=\"DoubleLiteral\"/>\n"
-  , "              </xs:sequence>\n"
-  , "          </xs:extension>\n"
-  , "      </xs:complexContent>\n"
-  , "  </xs:complexType>\n"
-  , "\n"
-  , "  <xs:complexType name=\"IStringExp\">\n"
-  , "      <xs:complexContent>\n"
-  , "          <xs:extension base=\"IExp\">\n"
-  , "              <xs:sequence>\n"
-  , "                 <xs:element ref=\"StringLiteral\"/>\n"
-  , "              </xs:sequence>\n"
-  , "          </xs:extension>\n"
-  , "      </xs:complexContent>\n"
-  , "  </xs:complexType>\n"
-  , "\n"
-  , "\n"
-  , "  <xs:complexType name=\"IClaferId\">\n"
-  , "      <xs:complexContent>\n"
-  , "          <xs:extension base=\"IExp\">\n"
-  , "              <xs:sequence>\n"
-  , "                  <xs:element name=\"ModuleName\" type=\"xs:string\" minOccurs=\"0\" maxOccurs=\"1\"/>\n"
-  , "                  <xs:element name=\"Id\"         type=\"xs:string\" />\n"
-  , "                  <xs:element name=\"IsTop\"      type=\"xs:boolean\"/>\n"
-  , "                  <xs:element name=\"Bind\"    type=\"xs:string\" />\n"
-  , "              </xs:sequence>\n"
-  , "          </xs:extension>\n"
-  , "      </xs:complexContent>\n"
-  , "  </xs:complexType>\n"
-  , "\n"
-  , "  <!-- ......................................................................-->\n"
-  , "  <!--\n"
-  , "data IDecl\n"
-  , "  = IDecl\n"
-  , "    { _isDisj :: Bool\n"
-  , "    , _decls :: [CName]\n"
-  , "    , _body :: PExp\n"
-  , "    }\n"
-  , "    -->\n"
-  , "\n"
-  , "   <xs:complexType name=\"IDeclaration\">\n"
-  , "       <xs:sequence>\n"
-  , "           <xs:element name=\"IsDisjunct\"       type=\"xs:boolean\"/>\n"
-  , "           <xs:element name=\"LocalDeclaration\" type=\"xs:string\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n"
-  , "           <xs:element name=\"Body\"             type=\"cl:IParentExp\"/>\n"
-  , "       </xs:sequence>\n"
-  , "   </xs:complexType>\n"
-  , "\n"
-  , "  <!-- ......................................................................-->\n"
-  , "  <!--\n"
-  , "data IQuant\n"
-  , "  = INo\n"
-  , "  | ILone\n"
-  , "  | IOne\n"
-  , "  | ISome\n"
-  , "  | IAll\n"
-  , "   -->\n"
-  , "\n"
-  , "   <xs:complexType name=\"IQuantifier\" abstract=\"true\"/>\n"
-  , "\n"
-  , "   <xs:complexType name=\"INo\">\n"
-  , "       <xs:complexContent>\n"
-  , "           <xs:extension base=\"cl:IQuantifier\"/>\n"
-  , "       </xs:complexContent>\n"
-  , "   </xs:complexType>\n"
-  , "\n"
-  , "   <xs:complexType name=\"ILone\">\n"
-  , "       <xs:complexContent>\n"
-  , "           <xs:extension base=\"cl:IQuantifier\"/>\n"
-  , "       </xs:complexContent>\n"
-  , "   </xs:complexType>\n"
-  , "\n"
-  , "   <xs:complexType name=\"IOne\">\n"
-  , "       <xs:complexContent>\n"
-  , "           <xs:extension base=\"cl:IQuantifier\"/>\n"
-  , "       </xs:complexContent>\n"
-  , "   </xs:complexType>\n"
-  , "\n"
-  , "   <xs:complexType name=\"ISome\">\n"
-  , "       <xs:complexContent>\n"
-  , "           <xs:extension base=\"cl:IQuantifier\"/>\n"
-  , "       </xs:complexContent>\n"
-  , "   </xs:complexType>\n"
-  , "\n"
-  , "   <xs:complexType name=\"IAll\">\n"
-  , "       <xs:complexContent>\n"
-  , "           <xs:extension base=\"cl:IQuantifier\"/>\n"
-  , "       </xs:complexContent>\n"
-  , "   </xs:complexType>\n"
-  , "\n"
-  , " <!-- ......................................................................-->\n"
-  , "\n"
-  , " <xs:element name=\"IntLiteral\"    type=\"xs:integer\"/>\n"
-  , " <xs:element name=\"DoubleLiteral\" type=\"xs:double\"/>\n"
-  , " <xs:element name=\"StringLiteral\" type=\"xs:string\"/>\n"
-  , "\n"
-  , "</xs:schema>\n"
-  , ""]
− src/Language/Clafer/Generator/Xml.hs
@@ -1,213 +0,0 @@-{-
- Copyright (C) 2012 Kacper Bak, Jimmy Liang <http://gsd.uwaterloo.ca>
-
- Permission is hereby granted, free of charge, to any person obtaining a copy of
- this software and associated documentation files (the "Software"), to deal in
- the Software without restriction, including without limitation the rights to
- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
- of the Software, and to permit persons to whom the Software is furnished to do
- so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
--}
--- | Generates a XML representation of IR conforming to the ClaferIR.xsd.
-module Language.Clafer.Generator.Xml where
-
--- import Text.XML.HaXml.XmlContent.Haskell hiding (Result)
-
-import Data.Maybe (fromMaybe)
-
-import Language.Clafer.Common
-import Language.Clafer.Front.AbsClafer
-import Language.Clafer.Intermediate.Intclafer
-
-tag :: String -> String -> String
-tag name exp' = concat ["<", name, ">", exp', "</", name, ">\n"]
-
-optTag :: Maybe a -> (a -> String) -> String
-optTag ele f = maybe "" f ele
-
-tagType :: String -> String -> String -> String
-tagType name typename exp' = opening ++ rest
-  where
-  opening = concat ["<", name, " xsi:type=\"cl:", typename, "\""]
-  rest
-    | null exp'  = " />"
-    | otherwise = concat [">", exp', "</", name, ">"]
-
-genXmlInteger :: Integer -> String
-genXmlInteger n = tag "IntLiteral" $ show n
-
-genXmlBoolean :: String -> Bool -> String
-genXmlBoolean label b = tag label $ toLowerS $ show b
-
-genXmlString :: String -> String
-genXmlString str = tag "StringLiteral" str
-
-genXmlIntPair :: (Integer, Integer) -> String
-genXmlIntPair (x, y) = concat
-  [ genXmlInteger x
-  , genXmlInteger y]
-
--- | Generate an XML representation of the IR
-genXmlModule :: IModule -> Result
-genXmlModule imodule = concat
-  [ "<?xml version=\"1.0\"?>"
-  , "<Module xmlns=\"http://clafer.org/ir\""
-  , " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
-  , " xmlns:cl=\"http://clafer.org/ir\""
-  , " xsi:schemaLocation=\"http://clafer.org/ir https://github.com/gsdlab/clafer/blob/master/src/ClaferIR.xsd\">"
-  , tag "Name" $ _mName imodule
-  , concatMap genXmlElement $ _mDecls imodule
-  , "</Module>"]
-
-
-genXmlClafer :: IClafer -> Result
-genXmlClafer x = case x of
-  IClafer pos abstract gcrd id' uid' puid' super' reference' crd glcard es  ->
-    concat [ tag "Position" $ genXmlPosition pos
-           , genXmlAbstract abstract
-           , optTag gcrd genXmlGCard
-           , genXmlId id'
-           , genXmlUid uid'
-           , genXmlParentUid puid'
-           , genXmlSuper super'
-           , genXmlReference reference'
-           , optTag crd genXmlCard
-           , genXmlGlCard glcard
-           , concatMap genXmlElement es]
-
-genXmlAbstract :: Bool -> String
-genXmlAbstract isAbs = genXmlBoolean "IsAbstract" isAbs
-
-genXmlGCard :: IGCard -> String
-genXmlGCard (IGCard isKeyword' interval') = tag "GroupCard" $ concat
-  [ genXmlBoolean "IsKeyword" isKeyword'
-  , tag "Interval" $ genXmlInterval interval']
-
-genXmlInterval :: (Integer, Integer) -> String
-genXmlInterval (nMin, nMax) = concat
-  [ tag "Min" $ genXmlInteger nMin
-  , tag "Max" $ genXmlInteger nMax]
-
-genXmlId :: String -> String
-genXmlId ident' = tag "Id" ident'
-
-genXmlUid :: String -> String
-genXmlUid uid' = tag "UniqueId" uid'
-
-genXmlParentUid :: String -> String
-genXmlParentUid uid' = tag "ParentUniqueId" uid'
-
-genXmlSuper :: Maybe PExp -> String
-genXmlSuper x = case x of
-  Nothing                 -> ""
-  Just pexp' -> genXmlPExp "Super" pexp'
-
-genXmlReference :: Maybe IReference -> String
-genXmlReference x = case x of
-  Nothing                 -> ""
-  Just (IReference isSet' pexp') -> tag "Reference" $ concat
-    [ genXmlBoolean "IsSet" isSet'
-    , genXmlPExp "Ref" pexp']
-
-genXmlCard :: (Integer, Integer) -> String
-genXmlCard interval' = tag "Card" $ genXmlInterval interval'
-
-genXmlGlCard :: (Integer, Integer) -> String
-genXmlGlCard interval' = tag "GlobalCard" $ genXmlInterval interval'
-
-genXmlElement :: IElement -> String
-genXmlElement x = case x of
-  IEClafer clafer  -> tagType "Declaration" "IClafer" $ genXmlClafer clafer
-  IEConstraint isHard' pexp  -> tagType "Declaration" "IConstraint" $ concat
-                         [ genXmlBoolean "IsHard" isHard'
-                         , genXmlPExp "ParentExp" pexp]
-  IEGoal isMaximize' pexp -> tagType "Declaration" "IGoal" $ concat
-                         [ genXmlBoolean "IsMaximize" isMaximize'
-                         , genXmlPExp "ParentExp" pexp]
-
-
-genXmlAnyOp :: (a -> String) -> (a -> String) -> [(String, a)] -> String
-genXmlAnyOp ft f xs = concatMap
-  (\(tname, texp) -> tagType tname (ft texp) $ f texp) xs
-
-genXmlPExp :: String -> PExp -> String
-genXmlPExp tagName (PExp iType' pid' pos' iexp) = tag tagName $ concat
-  [ optTag iType' genXmlIType
-  , tag "ParentId" pid'
-  , tag "Position" $ genXmlPosition pos'
-  , tagType "Exp" (genXmlIExpType iexp) $ genXmlIExp iexp]
-
-genXmlPosition :: Span -> String
-genXmlPosition (Span (Pos s1 s2) (Pos e1 e2)) = concat
-  [ tag "Start" $ genXmlIntPair (s1, s2)
-  , tag "End"   $ genXmlIntPair (e1, e2)]
-
-genXmlIExpType :: IExp -> String
-genXmlIExpType x = case x of
-  IDeclPExp _ _ _ -> "IDeclarationParentExp"
-  IFunExp _ _ -> "IFunctionExp"
-  IInt _ -> "IIntExp"
-  IDouble _ -> "IDoubleExp"
-  IStr _ -> "IStringExp"
-  IClaferId _ _ _ _ -> "IClaferId"
-
-genXmlIExp :: IExp -> String
-genXmlIExp x = case x of
-  IDeclPExp quant' decls' pexp -> concat
-    [ tagType "Quantifier" (genXmlQuantType quant') ""
-    , concatMap genXmlDecl decls'
-    , genXmlPExp "BodyParentExp" pexp]
-  IFunExp op' exps' -> concat
-    [ tag "Operation" $ concatMap escape op'
-    , concatMap (genXmlPExp "Argument") exps']
-    where
-    escape '\"' = "&quot;"
-    escape '\'' = "&apos;"
-    escape '<'  = "&lt;"
-    escape '>'  = "&gt;"
-    escape '&'  = "&amp;"
-    escape y    = [y]
-  IInt n -> genXmlInteger n
-  IDouble n -> tag "DoubleLiteral" $ show n
-  IStr str -> genXmlString str
-  IClaferId modName' sident' isTop' bind' -> concat
-    [ tag "ModuleName" modName'
-    , tag "Id" sident'
-    , genXmlBoolean "IsTop" isTop'
-    , tag "Bind" $ fromMaybe "" bind' ]
-
-genXmlDecl :: IDecl -> String
-genXmlDecl (IDecl disj locids pexp) = tag "Declaration" $ concat
-  [ genXmlBoolean "IsDisjunct" disj
-  , concatMap (tag "LocalDeclaration") locids
-  , genXmlPExp "Body" pexp]
-
-genXmlQuantType :: IQuant -> String
-genXmlQuantType x = case x of
-  INo   -> "INo"
-  ILone -> "ILone"
-  IOne  -> "IOne"
-  ISome -> "ISome"
-  IAll  -> "IAll"
-
-genXmlITypeType :: IType -> String
-genXmlITypeType x = case x of
-  TBoolean -> "IBoolean"
-  TString -> "IString"
-  TInteger -> "IInteger"
-  TReal -> "IReal"
-  TClafer _ -> "ISet"
-
-genXmlIType :: IType -> String
-genXmlIType x = tagType "Type" (genXmlITypeType x) ""
src/Language/Clafer/Intermediate/Desugarer.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE RankNTypes #-}
 {-
- Copyright (C) 2012-2014 Kacper Bak, Jimmy Liang, Michal Antkiewicz, Paulius Juodisius <http://gsd.uwaterloo.ca>
+ Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang, Michal Antkiewicz, Paulius Juodisius <http://gsd.uwaterloo.ca>
 
  Permission is hereby granted, free of charge, to any person obtaining a copy of
  this software and associated documentation files (the "Software"), to deal in
@@ -71,8 +71,8 @@ sugarDeclaration (IEClafer clafer) = ElementDecl (_cinPos clafer) $ Subclafer (_cinPos clafer) $ sugarClafer clafer
 sugarDeclaration (IEConstraint True constraint) =
       ElementDecl (_inPos constraint) $ Subconstraint (_inPos constraint) $ sugarConstraint constraint
-sugarDeclaration  (IEConstraint False softconstraint) =
-      ElementDecl (_inPos softconstraint) $ Subsoftconstraint (_inPos softconstraint) $ sugarSoftConstraint softconstraint
+sugarDeclaration  (IEConstraint False assertion) =
+      ElementDecl (_inPos assertion) $ SubAssertion (_inPos assertion) $ sugarAssertion assertion
 sugarDeclaration  (IEGoal _ goal) = ElementDecl (_inPos goal) $ Subgoal (_inPos goal) $ sugarGoal goal
 
 
@@ -95,8 +95,9 @@             "" "" (desugarSuper super'') (desugarReference reference'') (desugarCard crd'') (0, -1)
             (desugarElements elements'')) : (desugarInit id'' init'')
 
-getPExpClaferIdent :: SetExp -> String
+getPExpClaferIdent :: Exp -> String
 getPExpClaferIdent (ClaferId _ (Path _ [ (ModIdIdent _ (PosIdent (_, ident'))) ] )) = ident'
+getPExpClaferIdent (EJoin _ _ e2) = getPExpClaferIdent e2
 getPExpClaferIdent _ = error "Desugarer:getPExpClaferIdent not given a ClaferId PExp"
 
 sugarClafer :: IClafer -> Clafer
@@ -108,12 +109,12 @@ desugarSuper :: Super -> Maybe PExp
 desugarSuper (SuperEmpty _) = Nothing
 desugarSuper (SuperSome _ (ClaferId _ (Path _ [ (ModIdIdent _ (PosIdent (_, "clafer"))) ] ))) = Nothing
-desugarSuper (SuperSome _ setexp) = Just $ desugarSetExp setexp
+desugarSuper (SuperSome _ setexp) = Just $ desugarExp setexp
 
 desugarReference :: Reference -> Maybe IReference
 desugarReference (ReferenceEmpty _) = Nothing
-desugarReference (ReferenceSet _ setexp) = Just $ IReference True $ desugarSetExp setexp
-desugarReference (ReferenceBag _ setexp) = Just $ IReference False $ desugarSetExp setexp
+desugarReference (ReferenceSet _ setexp) = Just $ IReference True $ desugarExp setexp
+desugarReference (ReferenceBag _ setexp) = Just $ IReference False $ desugarExp setexp
 
 desugarInit :: PosIdent -> Init -> [IElement]
 desugarInit _ (InitEmpty _) = []
@@ -147,13 +148,12 @@ 
 sugarSuper :: Maybe PExp -> Super
 sugarSuper Nothing = SuperEmpty noSpan
-sugarSuper (Just pexp'@(PExp _ _ _ (IClaferId _ _ _ _))) = SuperSome noSpan (sugarSetExp pexp')
-sugarSuper (Just pexp') = error $ "Function sugarSuper from Desugarer expects a PExp (IClaferId) but instead was given: " ++ show pexp' -- Should never happen
+sugarSuper (Just pexp') = SuperSome noSpan (sugarExp pexp')
 
 sugarReference :: Maybe IReference -> Reference
 sugarReference Nothing = ReferenceEmpty noSpan
-sugarReference (Just (IReference True  pexp')) = ReferenceSet noSpan (sugarSetExp pexp')
-sugarReference (Just (IReference False pexp')) = ReferenceBag noSpan (sugarSetExp pexp')
+sugarReference (Just (IReference True  pexp')) = ReferenceSet noSpan (sugarExp pexp')
+sugarReference (Just (IReference False pexp')) = ReferenceBag noSpan (sugarExp pexp')
 
 sugarInitHow :: Bool -> InitHow
 sugarInitHow True  = InitConstant noSpan
@@ -164,8 +164,8 @@ desugarConstraint (Constraint _ exps') = desugarPath $ desugarExp $
     (if length exps' > 1 then foldl1 (EAnd noSpan) else head) exps'
 
-desugarSoftConstraint :: SoftConstraint -> PExp
-desugarSoftConstraint (SoftConstraint _ exps') = desugarPath $ desugarExp $
+desugarAssertion :: Assertion -> PExp
+desugarAssertion (Assertion _ exps') = desugarPath $ desugarExp $
     (if length exps' > 1 then foldl1 (EAnd noSpan) else head) exps'
 
 desugarGoal :: Goal -> PExp
@@ -175,8 +175,8 @@ sugarConstraint :: PExp -> Constraint
 sugarConstraint pexp = Constraint (_inPos pexp)  $ map sugarExp [pexp]
 
-sugarSoftConstraint :: PExp -> SoftConstraint
-sugarSoftConstraint pexp = SoftConstraint (_inPos pexp) $ map sugarExp [pexp]
+sugarAssertion :: PExp -> Assertion
+sugarAssertion pexp = Assertion (_inPos pexp) $ map sugarExp [pexp]
 
 sugarGoal :: PExp -> Goal
 sugarGoal pexp = Goal (_inPos pexp) $ map sugarExp [pexp]
@@ -208,8 +208,8 @@       (SuperSome s (ClaferId s name)) (ReferenceEmpty s) crd (InitEmpty s) es
   Subconstraint _ constraint  ->
       [IEConstraint True $ desugarConstraint constraint]
-  Subsoftconstraint _ softconstraint ->
-      [IEConstraint False $ desugarSoftConstraint softconstraint]
+  SubAssertion _ assertion ->
+      [IEConstraint False $ desugarAssertion assertion]
   Subgoal _ goal -> [IEGoal True $ desugarGoal goal]
 
 
@@ -217,7 +217,7 @@ sugarElement x = case x of
   IEClafer claf  -> Subclafer noSpan $ sugarClafer claf
   IEConstraint True constraint -> Subconstraint noSpan $ sugarConstraint constraint
-  IEConstraint False softconstraint -> Subsoftconstraint noSpan $ sugarSoftConstraint softconstraint
+  IEConstraint False assertion -> SubAssertion noSpan $ sugarAssertion assertion
   IEGoal _ goal -> Subgoal noSpan $ sugarGoal goal
 
 desugarGCard :: GCard -> Maybe IGCard
@@ -273,12 +273,12 @@ 
 desugarExp' :: Exp -> IExp
 desugarExp' x = case x of
-  DeclAllDisj _ decl exp' ->
+  EDeclAllDisj _ decl exp' ->
       IDeclPExp IAll [desugarDecl True decl] (dpe exp')
-  DeclAll _ decl exp' -> IDeclPExp IAll [desugarDecl False decl] (dpe exp')
-  DeclQuantDisj _ quant' decl exp' ->
+  EDeclAll _ decl exp' -> IDeclPExp IAll [desugarDecl False decl] (dpe exp')
+  EDeclQuantDisj _ quant' decl exp' ->
       IDeclPExp (desugarQuant quant') [desugarDecl True decl] (dpe exp')
-  DeclQuant _ quant' decl exp' ->
+  EDeclQuant _ quant' decl exp' ->
       IDeclPExp (desugarQuant quant') [desugarDecl False decl] (dpe exp')
   EIff _ exp0 exp'  -> dop iIff [exp0, exp']
   EImplies _ exp0 exp'  -> dop iImpl [exp0, exp']
@@ -287,7 +287,7 @@   EXor _ exp0 exp'  -> dop iXor [exp0, exp']
   EAnd _ exp0 exp'  -> dop iAnd [exp0, exp']
   ENeg _ exp'  -> dop iNot [exp']
-  QuantExp _ quant' exp' ->
+  EQuantExp _ quant' exp' ->
       IDeclPExp (desugarQuant quant') [] (desugarExp exp')
   ELt  _ exp0 exp'  -> dop iLt  [exp0, exp']
   EGt  _ exp0 exp'  -> dop iGt  [exp0, exp']
@@ -302,16 +302,24 @@   EMul _ exp0 exp'  -> dop iMul [exp0, exp']
   EDiv _ exp0 exp'  -> dop iDiv [exp0, exp']
   ERem _ exp0 exp'  -> dop iRem [exp0, exp']
-  ECSetExp _ exp'   -> dop iCSet [exp']
-  ESumSetExp _ exp' -> dop iSumSet [exp']
-  EProdSetExp _ exp' -> dop iProdSet [exp']
+  ECard _ exp'   -> dop iCSet [exp']
+  ESum _ exp' -> dop iSumSet [exp']
+  EProd _ exp' -> dop iProdSet [exp']
   EMinExp _ exp'    -> dop iMin [exp']
   EGMax _ exp' -> dop iGMax [exp']
   EGMin _ exp' -> dop iGMin [exp']
   EInt _ n  -> IInt $ mkInteger n
   EDouble _ (PosDouble n) -> IDouble $ read $ snd n
+  EReal _ (PosReal n) -> IReal $ read $ snd n
   EStr _ (PosString str)  -> IStr $ snd str
-  ESetExp _ sexp -> desugarSetExp' sexp
+  EUnion _ exp0 exp'        -> dop iUnion        [exp0, exp']
+  EUnionCom _ exp0 exp'     -> dop iUnion        [exp0, exp']
+  EDifference _ exp0 exp'   -> dop iDifference   [exp0, exp']
+  EIntersection _ exp0 exp' -> dop iIntersection [exp0, exp']
+  EDomain _ exp0 exp'       -> dop iDomain       [exp0, exp']
+  ERange _ exp0 exp'        -> dop iRange        [exp0, exp']
+  EJoin _ exp0 exp'         -> dop iJoin         [exp0, exp']
+  ClaferId _ name  -> desugarName name
   where
   dop = desugarOp desugarExp
   dpe = desugarPath.desugarExp
@@ -326,62 +334,43 @@       trans = if op' `elem` ([iNot, iIfThenElse] ++ logBinOps)
           then desugarPath else id
 
-
-desugarSetExp :: SetExp -> PExp
-desugarSetExp x = pExpDefPid (getSpan x) $ desugarSetExp' x
-
-
-desugarSetExp' :: SetExp -> IExp
-desugarSetExp' x = case x of
-  Union _ exp0 exp'        -> dop iUnion        [exp0, exp']
-  UnionCom _ exp0 exp'     -> dop iUnion        [exp0, exp']
-  Difference _ exp0 exp'   -> dop iDifference   [exp0, exp']
-  Intersection _ exp0 exp' -> dop iIntersection [exp0, exp']
-  Domain _ exp0 exp'       -> dop iDomain       [exp0, exp']
-  Range _ exp0 exp'        -> dop iRange        [exp0, exp']
-  Join _ exp0 exp'         -> dop iJoin         [exp0, exp']
-  ClaferId _ name  -> desugarName name
-
-  where
-  dop = desugarOp desugarSetExp
-
-
 sugarExp :: PExp -> Exp
 sugarExp x = sugarExp' $ _exp x
 
 
 sugarExp' :: IExp -> Exp
 sugarExp' x = case x of
-  IDeclPExp quant' [] pexp -> QuantExp noSpan (sugarQuant quant') (sugarExp pexp)
+  IDeclPExp quant' [] pexp -> EQuantExp noSpan (sugarQuant quant') (sugarExp pexp)
   IDeclPExp IAll (decl@(IDecl True _ _):[]) pexp ->
-    DeclAllDisj noSpan (sugarDecl decl) (sugarExp pexp)
+    EDeclAllDisj noSpan (sugarDecl decl) (sugarExp pexp)
   IDeclPExp IAll  (decl@(IDecl False _ _):[]) pexp ->
-    DeclAll noSpan (sugarDecl decl) (sugarExp pexp)
+    EDeclAll noSpan (sugarDecl decl) (sugarExp pexp)
   IDeclPExp quant' (decl@(IDecl True _ _):[]) pexp ->
-    DeclQuantDisj noSpan (sugarQuant quant') (sugarDecl decl) (sugarExp pexp)
+    EDeclQuantDisj noSpan (sugarQuant quant') (sugarDecl decl) (sugarExp pexp)
   IDeclPExp quant' (decl@(IDecl False _ _):[]) pexp ->
-    DeclQuant noSpan (sugarQuant quant') (sugarDecl decl) (sugarExp pexp)
+    EDeclQuant noSpan (sugarQuant quant') (sugarDecl decl) (sugarExp pexp)
+  IClaferId "" id' _ _ -> ClaferId noSpan $ Path noSpan [ModIdIdent noSpan $ mkIdent id']
+  IClaferId modName' id' _ _ -> ClaferId noSpan $ Path noSpan $ (sugarModId modName') : [sugarModId id']
+  IInt n -> EInt noSpan $ PosInteger ((0, 0), show n)
+  IDouble n -> EDouble noSpan $ PosDouble ((0, 0), show n)
+  IReal n -> EReal noSpan $ PosReal ((0, 0), show n)
+  IStr str -> EStr noSpan $ PosString ((0, 0), str)
   IFunExp op' exps' ->
     if op' `elem` unOps then (sugarUnOp op') (exps''!!0)
-    else if op' `elem` setBinOps then (ESetExp noSpan $ sugarSetExp' x)
     else if op' `elem` binOps then (sugarOp op') (exps''!!0) (exps''!!1)
     else (sugarTerOp op') (exps''!!0) (exps''!!1) (exps''!!2)
     where
     exps'' = map sugarExp exps'
-  IInt n -> EInt noSpan $ PosInteger ((0, 0), show n)
-  IDouble n -> EDouble noSpan $ PosDouble ((0, 0), show n)
-  IStr str -> EStr noSpan $ PosString ((0, 0), str)
-  IClaferId _ _ _ _ -> ESetExp noSpan $ sugarSetExp' x
-  _ -> error "Function sugarExp' from Desugarer was given an invalid argument" -- This should never happen
+  x' -> error $ "Desugarer.sugarExp': invalid argument: " ++ show x' -- This should never happen
   where
   sugarUnOp op''
     | op'' == iNot           = ENeg noSpan
-    | op'' == iCSet          = ECSetExp noSpan
+    | op'' == iCSet          = ECard noSpan
     | op'' == iMin           = EMinExp noSpan
     | op'' == iGMax          = EGMax noSpan
     | op'' == iGMin          = EGMin noSpan
-    | op'' == iSumSet        = ESumSetExp noSpan
-    | op'' == iProdSet       = EProdSetExp noSpan
+    | op'' == iSumSet        = ESum noSpan
+    | op'' == iProdSet       = EProd noSpan
     | otherwise              = error $ show op'' ++ "is not an op"
   sugarOp op''
     | op'' == iIff           = EIff noSpan
@@ -402,32 +391,18 @@     | op'' == iMul           = EMul noSpan
     | op'' == iDiv           = EDiv noSpan
     | op'' == iRem           = ERem noSpan
+    | op'' == iUnion         = EUnion noSpan
+    | op'' == iDifference    = EDifference noSpan
+    | op'' == iIntersection  = EIntersection noSpan
+    | op'' == iDomain        = EDomain noSpan
+    | op'' == iRange         = ERange noSpan
+    | op'' == iJoin          = EJoin noSpan
     | otherwise            = error $ show op'' ++ "is not an op"
   sugarTerOp op''
     | op'' == iIfThenElse    = EImpliesElse noSpan
     | otherwise            = error $ show op'' ++ "is not an op"
 
 
-sugarSetExp :: PExp -> SetExp
-sugarSetExp x = sugarSetExp' $ _exp x
-
-
-sugarSetExp' :: IExp -> SetExp
-sugarSetExp' (IFunExp op' exps') = (sugarOp op') (exps''!!0) (exps''!!1)
-    where
-    exps'' = map sugarSetExp exps'
-    sugarOp op''
-      | op'' == iUnion         = Union noSpan
-      | op'' == iDifference    = Difference noSpan
-      | op'' == iIntersection  = Intersection noSpan
-      | op'' == iDomain        = Domain noSpan
-      | op'' == iRange         = Range noSpan
-      | op'' == iJoin          = Join noSpan
-      | otherwise              = error "Invalid argument given to function sygarSetExp' in Desugarer"
-sugarSetExp' (IClaferId "" id' _ _) = ClaferId noSpan $ Path noSpan [ModIdIdent noSpan $ mkIdent id']
-sugarSetExp' (IClaferId modName' id' _ _) = ClaferId noSpan $ Path noSpan $ (sugarModId modName') : [sugarModId id']
-sugarSetExp' _ = error "IDecelPexp, IInt, IDobule, and IStr can not be sugared into a setExp!" --This should never happen
-
 desugarPath :: PExp -> PExp
 desugarPath (PExp iType' pid' pos' x) = reducePExp $ PExp iType' pid' pos' result
   where
@@ -467,12 +442,12 @@ 
 desugarDecl :: Bool -> Decl -> IDecl
 desugarDecl isDisj' (Decl _ locids exp') =
-    IDecl isDisj' (map desugarLocId locids) (desugarSetExp exp')
+    IDecl isDisj' (map desugarLocId locids) (desugarExp exp')
 
 
 sugarDecl :: IDecl -> Decl
 sugarDecl (IDecl _ locids exp') =
-    Decl noSpan (map sugarLocId locids) (sugarSetExp exp')
+    Decl noSpan (map sugarLocId locids) (sugarExp exp')
 
 
 desugarLocId :: LocId -> String
src/Language/Clafer/Intermediate/Intclafer.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE TemplateHaskell, DeriveDataTypeable #-}
 {-
- Copyright (C) 2012-2014 Kacper Bak, Jimmy Liang, Michal Antkiewicz, Luke Michael Brown <http://gsd.uwaterloo.ca>
+ Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang, Michal Antkiewicz, Luke Michael Brown <http://gsd.uwaterloo.ca>
 
  Permission is hereby granted, free of charge, to any person obtaining a copy of
  this software and associated documentation files (the "Software"), to deal in
@@ -58,11 +58,19 @@   = TBoolean
   | TString
   | TInteger
+  | TDouble
   | TReal
-  -- | the type is an intersection of the listed clafers
-  -- supports having paths in the inheritance hierarchy
-  -- supports multiple inheritance
-  | TClafer [UID]
+  | TClafer
+    { _hi :: [UID]          -- ^ [UID] represents an inheritance hierarchy obtained using @Common.findHierarchy
+    }
+  | TMap                      --  Represents a map from the src class to the target class
+    { _so :: IType            -- ^ must only be a TClass
+    , _ta :: IType            -- ^ must only be a TClass
+    }
+  | TUnion
+    { _un :: [IType]          -- ^ [IType] is a list of basic types (not union types)
+    }
+
   deriving (Eq,Ord,Show,Data,Typeable)
 
 -- | each file contains exactly one mode. A module is a list of declarations
@@ -164,6 +172,10 @@     { _iint :: Integer
     }
     -- | real number
+  | IReal
+    { _ireal :: Double
+    }
+    -- | double-precision floating point number
   | IDouble
     { _idouble :: Double
     }
@@ -398,3 +410,12 @@ 
 instance ToJSON Pos where
   toJSON _ = Null
+
+-- | Datatype used for JSON output. See Language.Clafer.gatherObjectivesAndAttributes
+data ObjectivesAndAttributes
+  = ObjectivesAndAttributes
+    { _qualities :: [String]
+    , _attributes :: [String]
+    }
+
+$(deriveToJSON defaultOptions{fieldLabelModifier = tail} ''ObjectivesAndAttributes)
src/Language/Clafer/Intermediate/ResolverName.hs view
@@ -54,7 +54,7 @@ 
 -- | How a given name was resolved
 data HowResolved
-  = Special     -- ^ "this", "parent", "children", and "root"
+  = Special     -- ^ "this", "parent", "ref", "root", and "children"
   | TypeSpecial -- ^ primitive type: "integer", "string"
   | Binding     -- ^ local variable (in constraints)
   | Subclafers  -- ^ clafer's descendant
@@ -156,6 +156,7 @@   IFunExp op' exps' -> if op' == iJoin then resNav else IFunExp op' <$> mapM (resolvePExp env) exps'
   IInt _ -> return x
   IDouble _ -> return x
+  IReal _ -> return x
   IStr _ -> return x
   IClaferId _ _ _ _ -> resNav
   where
@@ -185,32 +186,36 @@       | otherwise = mkPath' modName' <$> resolveImmName pos' env id'
   y -> throwError $ SemanticErr pos' $ "Cannot resolve nav of " ++ show y
 
--- depending on how resolved construct a path
+-- | Depending on how resolved construct a navigation path from 'context env'
 mkPath :: SEnv -> (HowResolved, String, [IClafer]) -> (IExp, [IClafer])
-mkPath env (howResolved, id', path) = case howResolved of
+mkPath    env     (howResolved, id',    path)       = case howResolved of
   Binding -> (IClaferId "" id' True Nothing, path)
-  Special -> (specIExp, path)
+  Special -> (specIExp id', path)
   TypeSpecial -> (IClaferId "" id' True (Just id'), path)
   Subclafers -> (toNav $ tail $ reverse $ map toTuple path, path)
   Ancestor -> (toNav' $ adjustAncestor (fromJust $ context env)
                                        (reverse $ map toTuple $ resPath env)
                                        (reverse $ map toTuple path), path)
-  _ -> (toNav' $ reverse $ map toTuple path, path)
+  Reference -> (toNav' $ reverse $ map toTuple path, path)
+  AbsClafer -> (toNav' $ reverse $ map toTuple path, path)
+  TopClafer -> (toNav' $ reverse $ map toTuple path, path)
   where
-  toNav = foldl'
-          (\exp' (id'', c) -> IFunExp iJoin [pExpDefPidPos exp', mkPLClaferId id'' False $ _uid <$> c])
+  toNav tuplePath = foldl'
+          (\exp' (id'', cbind) -> IFunExp iJoin [pExpDefPidPos exp', mkPLClaferId id'' (fromMaybe False $ isTopLevel <$> cbind) $ _uid <$> cbind])
           (IClaferId "" thisIdent True (_uid <$> context env))
-  specIExp = if id' /= thisIdent && id' /= rootIdent
-              then toNav [(id', Just $ head path)]
-              else if id' == thisIdent
-                then IClaferId "" thisIdent True (_uid <$> context env)
-                else IClaferId "" rootIdent True (Just rootIdent)
+          tuplePath
+  specIExp "this"     = IClaferId "" thisIdent True (_uid <$> context env)
+  specIExp "parent"   = toNav [("parent", Just $ head path)]
+  specIExp "ref"      = toNav [("ref", Just $ head path)]
+  specIExp "root"     = IClaferId "" rootIdent True (Just rootIdent)
+  specIExp "children" = toNav [(id', Just $ head path)]
+  specIExp i          = error $ "[BUG] ResolverName.specIExp: Unknown special id: " ++ i
 
 toTuple :: IClafer->(String, Maybe IClafer)
 toTuple c = (_uid c, Just c)
 
 toNav' :: [(String, Maybe IClafer)] -> IExp
-toNav' p = (mkIFunExp iJoin $ map (\(id', cbind) -> IClaferId "" id' False (_uid <$> cbind)) p) :: IExp
+toNav' tuplePath = (mkIFunExp iJoin $ map (\(id', cbind) -> IClaferId "" id' (fromMaybe False $ isTopLevel <$> cbind) (_uid <$> cbind)) tuplePath) :: IExp
 
 adjustAncestor :: IClafer -> [(String, Maybe IClafer)] -> [(String, Maybe IClafer)] -> [(String, Maybe IClafer)]
 adjustAncestor ctx cPath rPath = (thisIdent, Just ctx) : parents ++ (fromJust $ stripPrefix prefix rPath)
src/Language/Clafer/Intermediate/ResolverType.hs view
@@ -26,10 +26,12 @@ import Language.Clafer.Common
 import Language.Clafer.Intermediate.Intclafer hiding (uid)
 import Language.Clafer.Intermediate.Desugarer
+import Language.Clafer.Intermediate.TypeSystem
 import Language.Clafer.Front.PrintClafer
 
 import Control.Applicative
 import Control.Exception (assert)
+import Control.Lens ((&), (%~), traversed)
 import Control.Monad.Except
 import Control.Monad.List
 import Control.Monad.Reader
@@ -38,6 +40,7 @@ import Data.Maybe
 import Prelude hiding (exp)
 
+
 type TypeDecls = [(String, IType)]
 data TypeInfo = TypeInfo {iTypeDecls::TypeDecls, iUIDIClaferMap::UIDIClaferMap, iCurThis::IClafer, iCurPath::Maybe IType}
 
@@ -99,27 +102,6 @@ runTypeAnalysis :: TypeAnalysis a -> IModule -> Either ClaferSErr a
 runTypeAnalysis (TypeAnalysis tc) imodule = runReaderT tc $ TypeInfo [] (createUidIClaferMap imodule) undefined Nothing
 
-unionType :: IType -> [String]
-unionType TString  = [stringType]
-unionType TReal    = [realType]
-unionType TInteger = [integerType]
-unionType TBoolean = [booleanType]
-unionType (TClafer u) = u
-
-(+++) :: IType -> IType -> IType
-t1 +++ t2 = fromJust $ fromUnionType $ unionType t1 ++ unionType t2
-
-fromUnionType :: [String] -> Maybe IType
-fromUnionType u =
-    case sort $ nub $ u of
-        ["string"]  -> return TString
-        ["real"]    -> return TReal
-        ["integer"] -> return TInteger
-        ["int"]     -> return TInteger
-        ["boolean"] -> return TBoolean
-        []          -> Nothing
-        u'          -> return $ TClafer u'
-
 claferWithUid :: (Monad m) => UIDIClaferMap -> String -> m IClafer
 claferWithUid uidIClaferMap' u = case findIClafer uidIClaferMap' u of
   Just c -> return c
@@ -130,22 +112,6 @@   Just u -> return u
   Nothing -> fail $ "Analysis.parentOf: " ++ c ++ " not found!"
 
-refOf :: (Monad m) => UIDIClaferMap -> UID -> m UID
-refOf uidIClaferMap' c = do
-  case getReference <$> findIClafer uidIClaferMap' c of
-    Just [r] -> return r
-    _        -> fail $ "Analysis.refOf: No ref uid for " ++ show c
-
-hierarchy :: (Monad m) => UIDIClaferMap -> UID -> m [IClafer]
-hierarchy uidIClaferMap' c = (case findIClafer uidIClaferMap' c of
-      Nothing -> fail $ "Analysis.hierarchy: clafer " ++ c ++ "not found!"
-      Just clafer -> return $ findHierarchy getSuper uidIClaferMap' clafer)
-
-hierarchyMap :: (Monad m) => UIDIClaferMap -> (IClafer -> a) -> UID -> m [a]
-hierarchyMap uidIClaferMap' f c = (case findIClafer uidIClaferMap' c of
-      Nothing -> fail $ "Analysis.hierarchyMap: clafer " ++ c ++ "not found!"
-      Just clafer -> return $ mapHierarchy f getSuper uidIClaferMap' clafer)
-
 {-
  - C is an direct child of B.
  -
@@ -169,30 +135,6 @@                 return $ directChild || indirectChild
             )
 
-
-closure :: Monad m => UIDIClaferMap -> [String] -> m [String]
-closure uidIClaferMap' ut = concat `liftM` mapM (hierarchyMap uidIClaferMap' _uid) ut
-
-intersection :: Monad m => UIDIClaferMap -> IType -> IType -> m (Maybe IType)
-intersection uidIClaferMap' t1 t2 = do
-  h1 <- (mapM (hierarchyMap uidIClaferMap' _uid) $ unionType t1)
-  h2 <- (mapM (hierarchyMap uidIClaferMap' _uid) $ unionType t2)
-  return $ fromUnionType $ catMaybes [contains (head u1) u2 `mplus` contains (head u2) u1 | u1 <- h1, u2 <- h2 ]
-  where
-  contains i is = if i `elem` is then Just i else Nothing
-
-numeric :: IType -> Bool
-numeric TReal    = True
-numeric TInteger = True
-numeric _        = False
-
-coerce :: IType -> IType -> IType
-coerce TReal TReal       = TReal
-coerce TReal TInteger    = TReal
-coerce TInteger TReal    = TReal
-coerce TInteger TInteger = TInteger
-coerce x y = error $ "Not numeric: " ++ show x ++ ", " ++ show y
-
 str :: IType -> String
 str t =
   case unionType t of
@@ -215,7 +157,8 @@   let ut = catMaybes [commonHierarchy u1 u2 | u1 <- h1, u2 <- h2]
   return $ fromUnionType ut
   where
-  commonHierarchy h1 h2 = filterClafer $ commonHierarchy' (reverse h1) (reverse h2) Nothing
+  commonHierarchy :: [UID] -> [UID] -> Maybe UID
+  commonHierarchy h1 h2 = commonHierarchy' (reverse h1) (reverse h2) Nothing
   commonHierarchy' (x:xs) (y:ys) accumulator =
     if (x == y)
       then
@@ -224,23 +167,46 @@           else commonHierarchy' xs ys $ Just x
       else accumulator
   commonHierarchy' _ _ _ = error "ResolverType.commonHierarchy' expects two non empty lists but was given at least one empty list!" -- Should never happen
-  filterClafer value =
-    if (value == Just "clafer") then Nothing else value
 
+data TAMode
+  = TAReferences    -- | Phase one: only process references
+  | TAExpressions   -- | Phase two: only process constraints and goals
+
 resolveTModule :: (IModule, GEnv) -> Either ClaferSErr IModule
 resolveTModule (imodule, _) =
-  case runTypeAnalysis (analysis $ _mDecls imodule) imodule of
-    Right mDecls' -> return imodule{_mDecls = mDecls'}
+  case runTypeAnalysis (analysisReferences $ _mDecls imodule) imodule of
+    Right mDecls' -> case runTypeAnalysis (analysisExpressions $ mDecls') imodule{_mDecls = mDecls'} of
+      Right mDecls'' -> return imodule{_mDecls = mDecls''}
+      Left err      -> throwError err
     Left err      -> throwError err
   where
-  analysis decls1 = mapM (resolveTElement rootIdent) decls1
+  analysisReferences = mapM (resolveTElement TAReferences rootIdent)
+  analysisExpressions = mapM (resolveTElement TAExpressions rootIdent)
 
-resolveTElement :: String -> IElement -> TypeAnalysis IElement
-resolveTElement _ (IEClafer iclafer) =
+-- Phase one: only process references
+resolveTElement :: TAMode     -> String -> IElement          -> TypeAnalysis IElement
+resolveTElement    TAReferences  _         (IEClafer iclafer) =
   do
-    elements' <- mapM (resolveTElement $ _uid iclafer) (_elements iclafer)
+    uidIClaferMap' <- asks iUIDIClaferMap
+    reference' <- case _reference iclafer of
+      Nothing -> return Nothing
+      Just originalReference -> do
+        refs' <- resolveTPExp $ _ref originalReference
+        case refs' of
+          []     -> return Nothing
+          [ref'] -> return $ Just $ originalReference{_ref=(ref' & iType.traversed %~ (addHierarchy uidIClaferMap'))}
+          (ref':_) -> return $ Just $ originalReference{_ref=(ref' & iType.traversed %~ (addHierarchy uidIClaferMap'))}
+    elements' <- mapM (resolveTElement TAReferences (_uid iclafer)) (_elements iclafer)
+    return $ IEClafer iclafer{_elements = elements', _reference=reference'}
+resolveTElement    TAReferences  _         iec@(IEConstraint{}) = return iec
+resolveTElement    TAReferences  _         ieg@(IEGoal{}) = return ieg
+
+-- Phase two: only process constraints and goals
+resolveTElement    TAExpressions  _         (IEClafer iclafer) =
+  do
+    elements' <- mapM (resolveTElement TAExpressions (_uid iclafer)) (_elements iclafer)
     return $ IEClafer iclafer{_elements = elements'}
-resolveTElement parent' (IEConstraint _isHard _pexp) =
+resolveTElement    TAExpressions parent'   (IEConstraint _isHard _pexp) =
   IEConstraint _isHard <$> (testBoolean =<< resolveTConstraint parent' _pexp)
   where
   testBoolean pexp' =
@@ -248,7 +214,7 @@       unless (typeOf pexp' == TBoolean) $
         throwError $ SemanticErr (_inPos pexp') ("Cannot construct constraint on type '" ++ str (typeOf pexp') ++ "'")
       return pexp'
-resolveTElement parent' (IEGoal isMaximize' pexp') =
+resolveTElement    TAExpressions parent' (IEGoal isMaximize' pexp') =
   IEGoal isMaximize' <$> resolveTConstraint parent' pexp'
 
 resolveTConstraint :: String -> PExp -> TypeAnalysis PExp
@@ -275,12 +241,11 @@     curPath' <- curPath
     case curPath' of
       Just curPath'' -> do
-        ut <- closure uidIClaferMap' $ unionType curPath''
-        t <- runListT $ refOf uidIClaferMap' =<< foreachM ut
-        case fromUnionType t of
-          Just t' -> return $ p `withType` t'
-          Nothing -> throwError $ SemanticErr _inPos ("Cannot ref from type '" ++ str curPath'' ++ "'")
-      Nothing -> throwError $ SemanticErr _inPos ("Cannot ref at the start of a path")
+        case concatMap (getTMaps uidIClaferMap') $ getTClafers uidIClaferMap' curPath'' of
+          [t'] -> return $ p `withType` t'
+          (t':_) -> return $ p `withType` t'
+          [] -> throwError $ SemanticErr _inPos ("Cannot deref from type '" ++ str curPath'' ++ "'")
+      Nothing -> throwError $ SemanticErr _inPos ("Cannot deref at the start of a path")
 resolveTPExp' p@PExp{_inPos, _exp = IClaferId{_sident = "parent"}} = do
   uidIClaferMap' <- asks iUIDIClaferMap
   runListT $ runExceptT $ do
@@ -296,6 +261,10 @@           addRef result -- Case 2: Dereference the sident 1..* times
       Nothing -> throwError $ SemanticErr _inPos "Cannot parent at the start of a path"
 resolveTPExp' p@PExp{_exp = IClaferId{_sident = "integer"}} = runListT $ runExceptT $ return $ p `withType` TInteger
+resolveTPExp' p@PExp{_exp = IClaferId{_sident = "int"}} = runListT $ runExceptT $ return $ p `withType` TInteger
+resolveTPExp' p@PExp{_exp = IClaferId{_sident = "string"}} = runListT $ runExceptT $ return $ p `withType` TString
+resolveTPExp' p@PExp{_exp = IClaferId{_sident = "double"}} = runListT $ runExceptT $ return $ p `withType` TDouble
+resolveTPExp' p@PExp{_exp = IClaferId{_sident = "real"}} = runListT $ runExceptT $ return $ p `withType` TReal
 resolveTPExp' p@PExp{_inPos, _exp = IClaferId{_sident}} = do
   uidIClaferMap' <- asks iUIDIClaferMap
   runListT $ runExceptT $ do
@@ -317,7 +286,8 @@   where
   resolveTExp :: IExp -> TypeAnalysis [Either ClaferSErr (IType, IExp)]
   resolveTExp e@(IInt _)    = runListT $ runExceptT $ return (TInteger, e)
-  resolveTExp e@(IDouble _) = runListT $ runExceptT $ return (TReal, e)
+  resolveTExp e@(IDouble _) = runListT $ runExceptT $ return (TDouble, e)
+  resolveTExp e@(IReal _) = runListT $ runExceptT $ return (TReal, e)
   resolveTExp e@(IStr _)    = runListT $ runExceptT $ return (TString, e)
 
   resolveTExp e@IFunExp {_op, _exps = [arg]} =
@@ -331,8 +301,8 @@       let result
             | _op == iNot = test (t == TBoolean) >> return TBoolean
             | _op == iCSet = return TInteger
-            | _op == iSumSet = test (t == TInteger) >> return TInteger
-            | _op == iProdSet = test (t == TInteger) >> return TInteger
+            | _op == iSumSet = test (isTInteger t) >> return TInteger
+            | _op == iProdSet = test (isTInteger t) >> return TInteger
             | _op `elem` [iMin, iGMin, iGMax] = test (numeric t) >> return t
             | otherwise = assert False $ error $ "Unknown op '" ++ _op ++ "'"
       result' <- result
@@ -381,7 +351,7 @@             | _op `elem` relSetBinOps = testIntersect t1 t2 >> return TBoolean
             | _op `elem` [iSub, iMul, iDiv, iRem] = test (numeric t1 && numeric t2) >> return (coerce t1 t2)
             | _op == iPlus =
-                (test (t1 == TString && t2 == TString) >> return TString) -- Case 1: String concatenation
+                (test (isTString t1 && isTString t2) >> return TString) -- Case 1: String concatenation
                 `catchError`
                 const (test (numeric t1 && numeric t2) >> return (coerce t1 t2)) -- Case 2: Addition
             | otherwise = error $ "ResolverType: Unknown op: " ++ show e
@@ -401,12 +371,12 @@ --        throwError $ SemanticErr inPos ("The types are: '" ++ str t2 ++ "' and '" ++ str t3 ++ "'")
 
       unless (t1 == TBoolean) $
-        throwError $ SemanticErr _inPos ("Function 'if/else' cannot be performed on 'if' " ++ str t1 ++ " 'then' " ++ str t2 ++ " 'else' " ++ str t3)
+        throwError $ SemanticErr _inPos ("The type of condition in 'if/then/else' must be 'TBoolean', insted it is " ++ str t1)
 
       it <- getIfThenElseType uidIClaferMap' t2 t3
       t <- case it of
         Just it' -> return it'
-        Nothing  -> throwError $ SemanticErr _inPos ("Function 'if/else' cannot be performed on if '" ++ str t1 ++ "' then '" ++ str t2 ++ "' else '" ++ str t3 ++ "'")
+        Nothing  -> throwError $ SemanticErr _inPos ("Function 'if/then/else' cannot be performed on if '" ++ str t1 ++ "' then '" ++ str t2 ++ "' else '" ++ str t3 ++ "'")
 
       return (t, e{_exps = [arg1', arg2', arg3']})
 
@@ -459,9 +429,6 @@ 
 liftList :: Monad m => [a] -> ListT m a
 liftList = ListT . return
-
-foreachM :: Monad m => [a] -> ListT m a
-foreachM = ListT . return
 
 comparing :: Ord b => (a -> b) -> a -> a -> Ordering
 comparing f a b = f a `compare` f b
src/Language/Clafer/Intermediate/SimpleScopeAnalyzer.hs view
@@ -1,5 +1,5 @@ {-
- Copyright (C) 2012-2014 Jimmy Liang, Kacper Bak, Michał Antkiewicz <http://gsd.uwaterloo.ca>
+ Copyright (C) 2012-2015 Jimmy Liang, Kacper Bak, Michał Antkiewicz <http://gsd.uwaterloo.ca>
 
  Permission is hereby granted, free of charge, to any person obtaining a copy of
  this software and associated documentation files (the "Software"), to deal in
src/Language/Clafer/Intermediate/StringAnalyzer.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE RankNTypes, KindSignatures ,FlexibleContexts #-}
 {-
- Copyright (C) 2012-2014 Kacper Bak, Jimmy Liang, Luke Brown <http://gsd.uwaterloo.ca>
+ Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang, Luke Brown <http://gsd.uwaterloo.ca>
 
  Permission is hereby granted, free of charge, to any person obtaining a copy of
  this software and associated documentation files (the "Software"), to deal in
@@ -41,9 +41,14 @@ 
 
 astrClafer :: MonadState (Map.Map String Int) m => IClafer -> m IClafer
-astrClafer (IClafer s isAbs gcrd' ident' uid' puid' super' reference' crd' gCard es) =
-    IClafer s isAbs gcrd' ident' uid' puid' super' reference' crd' gCard `liftM` mapM astrElement es
+astrClafer (IClafer s isAbstract' gcrd' ident' uid' puid' super' reference' crd' gCard elements') = do
+    reference'' <- astrReference reference'
+    elements'' <- astrElement `mapM` elements'
+    return $ IClafer s isAbstract' gcrd' ident' uid' puid' super' reference'' crd' gCard elements''
 
+astrReference :: MonadState (Map.Map String Int) m => Maybe IReference -> m (Maybe IReference)
+astrReference Nothing = return Nothing
+astrReference (Just (IReference isSet' ref')) = Just <$> IReference isSet' `liftM` astrPExp ref'
 
 -- astrs single subclafer
 astrElement :: MonadState (Map.Map String Int) m => IElement -> m IElement
src/Language/Clafer/Intermediate/Tracing.hs view
@@ -19,11 +19,12 @@  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  SOFTWARE.
 -}
-module Language.Clafer.Intermediate.Tracing (traceIrModule, traceAstModule, Ast(..)) where
+module Language.Clafer.Intermediate.Tracing (traceIrModule, traceAstModule, Ast(..), printAstNode) where
 
 import Data.Map (Map)
 import qualified Data.Map as Map
 import Language.Clafer.Front.AbsClafer
+import Language.Clafer.Front.PrintClafer (printTree)
 import Language.Clafer.Intermediate.Intclafer
 
 traceIrModule :: IModule -> Map Span [Ir] --Map Span [Union (IRClafer IClafer) (IRPExp PExp)]
@@ -48,7 +49,7 @@   i (AstDeclaration a) = getSpan a
   i (AstClafer a) = getSpan a
   i (AstConstraint a) = getSpan a
-  i (AstSoftConstraint a) = getSpan a
+  i (AstAssertion a) = getSpan a
   i (AstGoal a) = getSpan a
   i (AstAbstract a) = getSpan a
   i (AstElements a) = getSpan a
@@ -63,7 +64,6 @@   i (AstExInteger a) = getSpan a
   i (AstName a) = getSpan a
   i (AstExp a) = getSpan a
-  i (AstSetExp a) = getSpan a
   i (AstDecl a) = getSpan a
   i (AstQuant a) = getSpan a
   i (AstEnumId a) = getSpan a
@@ -86,8 +86,8 @@ traverseConstraint :: Constraint -> [Ast]
 traverseConstraint x@(Constraint _ e) = AstConstraint x : concatMap traverseExp e
 
-traverseSoftConstraint :: SoftConstraint -> [Ast]
-traverseSoftConstraint x@(SoftConstraint _ e) = AstSoftConstraint x : concatMap traverseExp e
+traverseAssertion :: Assertion -> [Ast]
+traverseAssertion x@(Assertion _ e) = AstAssertion x : concatMap traverseExp e
 
 traverseGoal :: Goal -> [Ast]
 traverseGoal x@(Goal _ e) = AstGoal x : concatMap traverseExp e
@@ -111,22 +111,22 @@     ClaferUse _ n c e -> traverseName n ++ traverseCard c ++ traverseElements e
     Subconstraint _ c -> traverseConstraint c
     Subgoal _ g -> traverseGoal g
-    Subsoftconstraint _ c -> traverseSoftConstraint c
+    SubAssertion _ c -> traverseAssertion c
 
 traverseSuper :: Super -> [Ast]
 traverseSuper x =
   AstSuper x :
     case x of
     SuperEmpty _ -> []
-    SuperSome _ se -> traverseSetExp se
+    SuperSome _ se -> traverseExp se
 
 traverseReference :: Reference -> [Ast]
 traverseReference x =
   AstReference x :
     case x of
     ReferenceEmpty _ -> []
-    ReferenceSet _ se -> traverseSetExp se
-    ReferenceBag _ se -> traverseSetExp se
+    ReferenceSet _ se -> traverseExp se
+    ReferenceBag _ se -> traverseExp se
 
 traverseInit :: Init -> [Ast]
 traverseInit x =
@@ -175,10 +175,10 @@ traverseExp x =
   AstExp x :
     case x of
-    DeclAllDisj _ d e -> traverseDecl d ++ traverseExp e
-    DeclAll _ d e -> traverseDecl d ++ traverseExp e
-    DeclQuantDisj _ q d e -> traverseQuant q ++ traverseDecl d ++ traverseExp e
-    DeclQuant _ q d e -> traverseQuant q ++ traverseDecl d ++ traverseExp e
+    EDeclAllDisj _ d e -> traverseDecl d ++ traverseExp e
+    EDeclAll _ d e -> traverseDecl d ++ traverseExp e
+    EDeclQuantDisj _ q d e -> traverseQuant q ++ traverseDecl d ++ traverseExp e
+    EDeclQuant _ q d e -> traverseQuant q ++ traverseDecl d ++ traverseExp e
     EGMax _ e -> traverseExp e
     EGMin _ e -> traverseExp e
     EIff _ e1 e2 -> traverseExp e1 ++ traverseExp e2
@@ -195,36 +195,33 @@     ENeq _ e1 e2 -> traverseExp e1 ++ traverseExp e2
     EIn _ e1 e2 -> traverseExp e1 ++ traverseExp e2
     ENin _ e1 e2 -> traverseExp e1 ++ traverseExp e2
-    QuantExp _ q e -> traverseQuant q ++ traverseExp e
+    EQuantExp _ q e -> traverseQuant q ++ traverseExp e
     EAdd _ e1 e2 -> traverseExp e1 ++ traverseExp e2
     ESub _ e1 e2 -> traverseExp e1 ++ traverseExp e2
     EMul _ e1 e2 -> traverseExp e1 ++ traverseExp e2
     EDiv _ e1 e2 -> traverseExp e1 ++ traverseExp e2
-    ECSetExp _ e -> traverseExp e
+    ERem _ e1 e2 -> traverseExp e1 ++ traverseExp e2
+    ESum _ e -> traverseExp e
+    EProd _ e -> traverseExp e
+    ECard _ e -> traverseExp e
     EMinExp _ e -> traverseExp e
     EImpliesElse _ e1 e2 e3 -> traverseExp e1 ++ traverseExp e2 ++ traverseExp e3
     EInt _ _ -> []
     EDouble _ _ -> []
+    EReal _ _ -> []
     EStr _ _ -> []
-    ESetExp _ s -> traverseSetExp s
-    _ -> error "Invalid argument given to function traverseExp from Tracing"
-
-traverseSetExp :: SetExp -> [Ast]
-traverseSetExp x =
-  AstSetExp x :
-    case x of
-    Union _ s1 s2 -> traverseSetExp s1 ++ traverseSetExp s2
-    UnionCom _ s1 s2 -> traverseSetExp s1 ++ traverseSetExp s2
-    Difference _ s1 s2 -> traverseSetExp s1 ++ traverseSetExp s2
-    Intersection _ s1 s2 -> traverseSetExp s1 ++ traverseSetExp s2
-    Domain _ s1 s2 -> traverseSetExp s1 ++ traverseSetExp s2
-    Range _ s1 s2 -> traverseSetExp s1 ++ traverseSetExp s2
-    Join _ s1 s2 -> traverseSetExp s1 ++ traverseSetExp s2
+    EUnion _ s1 s2 -> traverseExp s1 ++ traverseExp s2
+    EUnionCom _ s1 s2 -> traverseExp s1 ++ traverseExp s2
+    EDifference _ s1 s2 -> traverseExp s1 ++ traverseExp s2
+    EIntersection _ s1 s2 -> traverseExp s1 ++ traverseExp s2
+    EDomain _ s1 s2 -> traverseExp s1 ++ traverseExp s2
+    ERange _ s1 s2 -> traverseExp s1 ++ traverseExp s2
+    EJoin _ s1 s2 -> traverseExp s1 ++ traverseExp s2
     ClaferId _ n -> traverseName n
 
 traverseDecl :: Decl -> [Ast]
 traverseDecl x@(Decl _ l s) =
-  AstDecl x : (concatMap traverseLocId l ++ traverseSetExp s)
+  AstDecl x : (concatMap traverseLocId l ++ traverseExp s)
 
 traverseQuant :: Quant -> [Ast]
 traverseQuant x =
@@ -244,7 +241,7 @@   AstDeclaration Declaration |
   AstClafer Clafer |
   AstConstraint Constraint |
-  AstSoftConstraint SoftConstraint |
+  AstAssertion Assertion |
   AstGoal Goal |
   AstAbstract Abstract |
   AstElements Elements |
@@ -259,10 +256,35 @@   AstExInteger ExInteger |
   AstName Name |
   AstExp Exp |
-  AstSetExp SetExp |
   AstDecl Decl |
   AstQuant Quant |
   AstEnumId EnumId |
   AstModId ModId |
   AstLocId LocId
   deriving (Eq, Show)
+
+printAstNode :: Ast -> String
+printAstNode (AstModule x) = printTree x
+printAstNode (AstDeclaration x) = printTree x
+printAstNode (AstClafer x) = printTree x
+printAstNode (AstConstraint x) = printTree x
+printAstNode (AstAssertion x) = printTree x
+printAstNode (AstGoal x) = printTree x
+printAstNode (AstAbstract x) = printTree x
+printAstNode (AstElements x) = printTree x
+printAstNode (AstElement x) = printTree x
+printAstNode (AstSuper x) = printTree x
+printAstNode (AstReference x) = printTree x
+printAstNode (AstInit x) = printTree x
+printAstNode (AstInitHow x) = printTree x
+printAstNode (AstGCard x) = printTree x
+printAstNode (AstCard x) = printTree x
+printAstNode (AstNCard x) = printTree x
+printAstNode (AstExInteger x) = printTree x
+printAstNode (AstName x) = printTree x
+printAstNode (AstExp x) = printTree x
+printAstNode (AstDecl x) = printTree x
+printAstNode (AstQuant x) = printTree x
+printAstNode (AstEnumId x) = printTree x
+printAstNode (AstModId x) = printTree x
+printAstNode (AstLocId x) = printTree x
+ src/Language/Clafer/Intermediate/TypeSystem.hs view
@@ -0,0 +1,484 @@+{-# LANGUAGE NamedFieldPuns #-}
+{-
+ Copyright (C) 2015 Michal Antkiewicz <http://gsd.uwaterloo.ca>
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
+ this software and associated documentation files (the "Software"), to deal in
+ the Software without restriction, including without limitation the rights to
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is furnished to do
+ so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+-}
+module Language.Clafer.Intermediate.TypeSystem where
+
+import Language.Clafer.Common
+import Language.Clafer.Intermediate.Intclafer hiding (uid)
+
+import Control.Lens ((&), (<&>), (%~))
+import Control.Monad (mplus, liftM)
+import Data.List (nub)
+import Data.Maybe
+import Prelude hiding (exp)
+
+{- | Example Clafer model used in the various test cases.
+
+abstract Person
+    DOB -> integer
+
+abstract Student : Person
+    StudentID -> string
+
+abstract Employee : Person
+    EmplID -> integer
+
+Alice : Student
+    [ this.DOB.ref = 1990 ]
+    [ this.StudentID.ref = "123Alice" ]
+
+Bob : Employee
+    [ this.EmplID.ref = 345 ]
+
+AliceAndBob -> Person
+[ root.AliceAndBob.ref = Alice, Bob ]
+
+AliceAndBob2 -> Alice ++ Bob
+-}
+
+{- $setup
+>>> :m + Control.Monad.List
+
+TClafer
+>>> let tClaferPerson = TClafer [ "Person" ]
+>>> let tClaferDOB = TClafer [ "DOB" ]
+>>> let tClaferStudent = TClafer [ "Student", "Person" ]
+>>> let tClaferStudentID = TClafer [ "StudentID" ]
+>>> let tClaferEmployee = TClafer [ "Employee", "Person" ]
+>>> let tClaferEmplID = TClafer [ "EmplID" ]
+>>> let tClaferAlice = TClafer [ "Alice", "Student", "Person" ]
+>>> let tClaferBob = TClafer [ "Bob", "Employee", "Person" ]
+>>> let tClaferAliceAndBob = TClafer [ "AliceAndBob" ]
+>>> let tClaferAliceAndBob2 = TClafer [ "AliceAndBob2" ]
+
+TUnion
+>>> let tUnionAliceBob = TUnion [ tClaferAlice, tClaferBob ]
+
+TMap
+>>> let tMapDOB = TMap tClaferPerson tClaferDOB
+>>> let tDrefMapDOB = TMap tClaferDOB TInteger
+>>> let tMapStudentID = TMap tClaferStudent tClaferStudentID
+>>> let tDrefMapStudentID = TMap tClaferStudentID TString
+>>> let tMapEmplID = TMap tClaferEmplID tClaferEmplID
+>>> let tDrefMapEmplID = TMap tClaferEmplID TInteger
+>>> let tDrefMapAliceAndBob = TMap tClaferAliceAndBob tClaferPerson
+>>> let tDrefMapAliceAndBob2 = TMap tClaferAliceAndBob tUnionAliceBob
+
+constants
+>>> let t1990 = TInteger
+>>> let t123Alice = TString
+>>> let t345 = TInteger
+-}
+
+-- | Sing
+rootTClafer :: IType
+rootTClafer = TClafer ["root"]
+
+-- | Obj
+claferTClafer :: IType
+claferTClafer = TClafer ["clafer"]
+
+numeric :: IType     -> Bool
+numeric TInteger     = True
+numeric TReal        = True
+numeric TDouble      = True
+numeric (TMap _ ta') = numeric ta'
+numeric (TUnion un') = any numeric un'
+numeric _            = False
+
+isTInteger :: IType    -> Bool
+isTInteger TInteger     = True
+isTInteger (TMap _ ta') = isTInteger ta'
+isTInteger (TUnion un') = any isTInteger un'
+isTInteger _            = False
+
+isTString :: IType    -> Bool
+isTString TString      = True
+isTString (TMap _ ta') = isTString ta'
+isTString (TUnion un') = any isTString un'
+isTString _            = False
+
+
+-- | Get TClafer for a given Clafer
+-- can only be called after inheritance resolver
+getTClafer :: IClafer -> IType
+getTClafer    iClafer' = case _uid iClafer' of
+  "root"   -> rootTClafer
+  "clafer" -> claferTClafer
+  _        -> case _super iClafer' of
+    Nothing     -> TClafer [ _uid iClafer']
+    Just super' -> (fromJust $ _iType super') & hi %~ ((:) (_uid iClafer'))
+
+-- | Get TClafer for a given Clafer by its UID
+-- can only be called after inheritance resolver
+getTClaferByUID :: UIDIClaferMap -> UID -> Maybe IType
+getTClaferByUID    uidIClaferMap'   uid' = case uid' of
+  "root"   -> Just $ rootTClafer
+  "clafer" -> Just $ claferTClafer
+  _        -> findIClafer uidIClaferMap' uid' <&> getTClafer
+
+-- | Get TClafer for a given Clafer by its UID
+-- can only be called after inheritance resolver
+getTClaferFromIExp :: UIDIClaferMap -> IExp -> Maybe IType
+getTClaferFromIExp    uidIClaferMap'   (IClaferId _ uid' _ _) = getTClaferByUID uidIClaferMap' uid'
+getTClaferFromIExp    _                (IInt _)               = Just TInteger
+getTClaferFromIExp    _                (IReal _)              = Just TReal
+getTClaferFromIExp    _                (IDouble _)            = Just TDouble
+getTClaferFromIExp    _                (IStr _)               = Just TString
+getTClaferFromIExp    _                _                      = Nothing
+
+-- | Get TMap for a given reference Clafer. Nothing for non-reference clafers.
+-- can only be called after inheritance resolver
+getDrefTMap :: IClafer -> Maybe IType
+getDrefTMap    iClafer' = case _uid iClafer' of
+  "root"   -> Nothing
+  "clafer" -> Nothing
+  _        -> TMap <$> (Just $ getTClafer iClafer') <*> (iClafer' & _reference <&> _ref >>= _iType)
+
+-- | Get TMap for a given Clafer by its UID. Nothing for non-reference clafers.
+-- can only be called after inheritance resolver
+getDrefTMapByUID :: UIDIClaferMap -> UID -> Maybe IType
+getDrefTMapByUID    uidIClaferMap'   uid' = case uid' of
+  "root"   -> Nothing
+  "clafer" -> Nothing
+  _        -> findIClafer uidIClaferMap' uid' >>= getDrefTMap
+
+
+hierarchy :: (Monad m) => UIDIClaferMap -> UID -> m [IClafer]
+hierarchy uidIClaferMap' uid' = (case findIClafer uidIClaferMap' uid' of
+      Nothing -> fail $ "TypeSystem.hierarchy: clafer " ++ uid' ++ "not found!"
+      Just clafer -> return $ findHierarchy getSuper uidIClaferMap' clafer)
+
+hierarchyMap :: (Monad m) => UIDIClaferMap -> (IClafer -> a) -> UID -> m [a]
+hierarchyMap uidIClaferMap' f c = (case findIClafer uidIClaferMap' c of
+      Nothing -> fail $ "TypeSystem.hierarchyMap: clafer " ++ c ++ "not found!"
+      Just clafer -> return $ mapHierarchy f getSuper uidIClaferMap' clafer)
+
+
+{- ---------------------------------------
+ - Sums, Intersections, and Compositions -
+ --------------------------------------- -}
+
+unionType :: IType -> [String]
+unionType TString  = [stringType]
+unionType TReal    = [realType]
+unionType TDouble  = [doubleType]
+unionType TInteger = [integerType]
+unionType TBoolean = [booleanType]
+unionType (TClafer u) = u
+unionType (TUnion types) = concatMap unionType types
+unionType (TMap _ ta') = unionType ta'
+
+fromUnionType :: [String] -> Maybe IType
+fromUnionType u =
+    case nub $ u of
+        ["string"]  -> Just TString
+        ["integer"] -> Just TInteger
+        ["int"]     -> Just TInteger
+        ["double"]  -> Just TDouble
+        ["real"]    -> Just TReal
+        []          -> Nothing
+        u'          -> Just $ TClafer u'
+
+{- | Union the two given types
+>>> TString +++ TString
+TString
+
+Unions with only one type should be collapsed.
+>>> TUnion [TString] +++ TString
+TString
+
+>>> TString +++ TInteger
+TUnion {_un = [TString,TInteger]}
+
+>>> TString +++ TUnion [TInteger]
+TUnion {_un = [TString,TInteger]}
+
+>>> TUnion [TString] +++ TInteger
+TUnion {_un = [TString,TInteger]}
+
+>>> TUnion [TString] +++ TUnion[TInteger]
+TUnion {_un = [TString,TInteger]}
+
+>>> TUnion [TString] +++ TUnion[TInteger] +++ TInteger +++ TString
+TUnion {_un = [TString,TInteger]}
+
+Should return TUnion {_un = [TClafer {_hi = ["Alice","Student","Person"]},TClafer {_hi = ["Bob","Employee","Person"]}]}
+>>> tClaferAlice +++ tClaferBob
+TClafer {_hi = ["Alice","Student","Person","Bob","Employee"]}
+
+>>> tClaferAlice +++ tClaferAlice
+TClafer {_hi = ["Alice","Student","Person"]}
+-}
+(+++) :: IType -> IType -> IType
+TString         +++ TString         = TString
+TReal           +++ TReal           = TReal
+TDouble         +++ TDouble         = TDouble
+TInteger        +++ TInteger        = TInteger
+t1@(TClafer u1) +++ t2@(TClafer u2) = if t1 == t2
+                                      then t1
+                                      else (TClafer $ nub $ u1 ++ u2)  -- should be TUnion [t1,t2]
+(TMap so1 ta1)  +++ (TMap so2 ta2)  = (TMap (so1 +++ so2) (ta1 +++ ta2))
+(TUnion un1)    +++ (TUnion un2)    = collapseUnion (TUnion $ nub $ un1 ++ un2)
+(TUnion un1)    +++ t2              = collapseUnion (TUnion $ nub $ un1 ++ [t2])
+t1              +++ (TUnion un2)    = collapseUnion (TUnion $ nub $ t1:un2)
+t1              +++ t2              = if t1 == t2
+                                      then t1
+                                      else TUnion [t1, t2]
+
+collapseUnion :: IType    -> IType
+collapseUnion (TUnion [t]) = t
+collapseUnion t            = t
+
+-- original version
+-- (+++) :: IType -> IType -> IType
+-- t1 +++ t2 = fromJust $ fromUnionType $ unionType t1 ++ unionType t2
+
+{- | Intersection of two types.
+>>> runListT $ intersection undefined TString TString
+[Just TString]
+
+>>> runListT $ intersection undefined TInteger TString
+[Nothing]
+
+>>> runListT $ intersection undefined TInteger TReal
+[Just TReal]
+
+>>> runListT $ intersection undefined tDrefMapDOB TInteger
+[Just TInteger]
+
+Cannot assign a TReal to a map to TInteger
+>>> runListT $ intersection undefined tDrefMapDOB TReal
+[Nothing]
+
+Cannot assign a TReal to a map to TInteger
+>>> runListT $ intersection undefined TReal tDrefMapDOB
+[Nothing]
+
+-}
+
+intersection :: Monad m => UIDIClaferMap -> IType -> IType -> m (Maybe IType)
+intersection _              TBoolean        TBoolean      = return $ Just TBoolean
+intersection _              TString         TString       = return $ Just TString
+intersection _              TReal           TReal         = return $ Just TReal
+intersection _              TReal           TDouble       = return $ Just TReal
+intersection _              TDouble         TReal         = return $ Just TReal
+intersection _              TReal           TInteger      = return $ Just TReal
+intersection _              TInteger        TReal         = return $ Just TReal
+intersection _              TDouble         TDouble       = return $ Just TDouble
+intersection _              TDouble         TInteger      = return $ Just TDouble
+intersection _              TInteger        TDouble       = return $ Just TDouble
+intersection _              TInteger        TInteger      = return $ Just TInteger
+intersection uidIClaferMap' (TUnion t1s)    t2@(TClafer _) = do
+  t1s' <- mapM (intersection uidIClaferMap' t2) t1s
+  return $ case catMaybes t1s' of
+    [] -> Nothing
+    [t] -> Just t
+    t1s'' -> Just $ TUnion t1s''
+intersection uidIClaferMap' t1@(TClafer _)  (TUnion t2s) = do
+  t2s' <- mapM (intersection uidIClaferMap' t1) t2s
+  return $ case catMaybes t2s' of
+    [] -> Nothing
+    [t] -> Just t
+    t2s'' -> Just $ TUnion t2s''
+intersection uidIClaferMap' t@(TClafer ut1) (TClafer ut2) = if ut1 == ut2
+  then return $ Just t
+  else do
+    h1 <- (mapM (hierarchyMap uidIClaferMap' _uid) ut1)
+    h2 <- (mapM (hierarchyMap uidIClaferMap' _uid) ut2)
+    return $ fromUnionType $ catMaybes [contains (head u1) u2 `mplus` contains (head u2) u1 | u1 <- h1, u2 <- h2 ]
+  where
+  contains i is = if i `elem` is then Just i else Nothing
+intersection uidIClaferMap' (TMap _ ta1) (TMap _ ta2) = intersection uidIClaferMap' ta1 ta2
+intersection uidIClaferMap' (TMap _ ta1) ot2          = do
+  coercedType <- intersection uidIClaferMap' ta1 ot2
+  -- that means ot2 was coerced to ta1, so it's safe
+  return $ if (Just ta1) == coercedType then coercedType else Nothing
+intersection uidIClaferMap' ot1          (TMap _ ta2) = do
+  coercedType <- intersection uidIClaferMap' ot1 ta2
+  -- that means ot2 was coerced to ta1, so it's safe
+  return $ if (Just ta2) == coercedType then coercedType else Nothing
+intersection _              _            _            = do
+  -- traceM $ "(DEBUG) TypeSystem.intersection: cannot intersect incompatible types: '"
+  --      ++ show t1
+  --      ++ "'' and '"
+  --      ++ show t2
+  --      ++ "'"
+  return Nothing
+
+-- old version
+-- intersection :: Monad m => UIDIClaferMap -> IType -> IType -> m (Maybe IType)
+-- intersection uidIClaferMap' t1 t2 = do
+--   h1 <- (mapM (hierarchyMap uidIClaferMap' _uid) $ unionType t1)
+--   h2 <- (mapM (hierarchyMap uidIClaferMap' _uid) $ unionType t2)
+--   return $ fromUnionType $ catMaybes [contains (head u1) u2 `mplus` contains (head u2) u1 | u1 <- h1, u2 <- h2 ]
+--   where
+--   contains i is = if i `elem` is then Just i else Nothing
+
+
+
+{- | Compute the type of sequential composition of two types
+>>> runListT $ composition undefined TString TString
+[Nothing]
+
+>>> runListT $ composition undefined TInteger TString
+[Nothing]
+
+>>> runListT $ composition undefined TInteger TReal
+[Nothing]
+
+>>> runListT $ composition undefined tDrefMapDOB TInteger
+[Just (TMap {_so = TClafer {_hi = ["DOB"]}, _ta = TInteger})]
+
+Cannot assign a TReal to a map to TInteger, should return [Nothing]
+>>> runListT $ composition undefined tDrefMapDOB TReal
+[Just (TMap {_so = TClafer {_hi = ["DOB"]}, _ta = TReal})]
+
+Cannot assign a TInteger to a map to TInteger
+>>> runListT $ composition undefined TInteger tDrefMapDOB
+[Nothing]
+
+Cannot assign a TReal to a map to TInteger
+>>> runListT $ composition undefined TReal tDrefMapDOB
+[Nothing]
+
+>>> runListT $ composition undefined tDrefMapDOB (TMap TReal TString)
+[Just (TMap {_so = TClafer {_hi = ["DOB"]}, _ta = TString})]
+
+The following should return [Nothing]
+>>> runListT $ composition undefined (TMap TString TReal) (TMap TInteger TString)
+[Just (TMap {_so = TString, _ta = TString})]
+-}
+composition :: Monad m => UIDIClaferMap -> IType -> IType -> m (Maybe IType)
+composition uidIClaferMap' (TMap so1 ta1) (TMap so2 ta2) = do
+    -- check whether we can compose?
+    _ <- intersection uidIClaferMap' ta1 so2
+    return $ Just $ TMap so1 ta2
+composition uidIClaferMap' ot1          (TMap so2 ta2) = do
+    ot1' <- intersection uidIClaferMap' ot1 so2
+    return $ TMap <$> ot1' <*> Just ta2
+composition uidIClaferMap' (TMap so1 ta1) ot2          = do
+    ot2' <- intersection uidIClaferMap' ta1 ot2
+    return $ TMap so1 <$> ot2'
+composition _              _            _            = do
+  -- traceM $ "(DEBUG) ResolverType.composition: cannot compose incompatible types: '"
+  --      ++ show t1
+  --      ++ "'' and '"
+  --      ++ show t2
+  --      ++ "'"
+  return Nothing
+
+addHierarchy :: UIDIClaferMap -> IType           -> IType
+addHierarchy    uidIClaferMap'   (TClafer [uid']) = TClafer $ mapHierarchy _uid getSuper uidIClaferMap' $ fromJust $ findIClafer uidIClaferMap' uid'
+addHierarchy    uidIClaferMap'   (TMap so' ta')   = TMap (addHierarchy uidIClaferMap' so') (addHierarchy uidIClaferMap' ta')
+addHierarchy    uidIClaferMap'   (TUnion un')     = TUnion $ map (addHierarchy uidIClaferMap') un'
+addHierarchy    _                x                = x
+
+closure :: Monad m => UIDIClaferMap -> [String] -> m [String]
+closure uidIClaferMap' ut = concat `liftM` mapM (hierarchyMap uidIClaferMap' _uid) ut
+
+getTMaps :: UIDIClaferMap -> IType        -> [IType]
+getTMaps    uidIClaferMap'   (TClafer hi') = catMaybes $ map (getDrefTMapByUID uidIClaferMap') hi'
+getTMaps    uidIClaferMap'   (TMap _ ta')  = getTMaps uidIClaferMap' ta'
+getTMaps    uidIClaferMap'   (TUnion un')  = concatMap (getTMaps uidIClaferMap') un'
+getTMaps    _                _             = []
+
+getTClafers :: UIDIClaferMap -> IType          -> [IType]
+getTClafers    uidIClaferMap'   (TClafer hi')   = catMaybes $ map (getTClaferByUID uidIClaferMap') hi'
+getTClafers    uidIClaferMap'   (TMap _ ta')    = getTClafers uidIClaferMap' ta'
+getTClafers    uidIClaferMap'   (TUnion un')    = concatMap (getTClafers uidIClaferMap') un'
+getTClafers    _                _               = []
+
+
+{- Coersions -}
+
+coerce :: IType -> IType -> IType
+-- basic coersions
+coerce TReal TReal       = TReal
+coerce TReal TInteger    = TReal
+coerce TInteger TReal    = TReal
+coerce TReal TDouble     = TReal
+coerce TDouble TReal     = TReal
+coerce TDouble TDouble   = TDouble
+coerce TDouble TInteger  = TDouble
+coerce TInteger TDouble  = TDouble
+coerce TInteger TInteger = TInteger
+-- reduce complex types to simple ones
+coerce (TMap s1 t1) t2           = TMap s1 $ coerce t1 t2
+coerce t1           (TMap s2 t2) = TMap s2 $ coerce t1 t2
+coerce x y = error $ "TypeSystem.coerce: Cannot coerce not numeric: " ++ show x ++ " and " ++ show y
+
+
+{- | Return the type if it's possible to coerce the right type
+
+coerceRight TString TInteger
+Nothing
+
+>>> coerceRight TInteger TInteger
+Just TInteger
+
+>>> coerceRight TDouble TInteger
+Just TDouble
+
+>>> coerceRight TReal TDouble
+Just TReal
+
+>>> coerceRight TInteger TDouble
+Nothing
+
+>>> coerceRight TDouble TReal
+Nothing
+-}
+coerceRight :: IType -> IType -> Maybe IType
+coerceRight    lt       rt     = let
+    coercedRType = coerce lt rt
+  in
+    if lt == coercedRType then Just lt else Nothing
+
+{- Note about intersections and unions
+
+Refinement Intersections
+========================
+
+http://cstheory.stackexchange.com/questions/20536/what-are-the-practical-issues-with-intersection-and-union-types
+"the intersection/union of two types can be formed only if they refine the same archetype"
+
+In Clafer, that means that for
+abstract Person
+abstract Student : Person
+Alice : Student   -- AT = TClafer [ Alice, Student, Person ]
+Bob : Person      -- BT = TClafer [ Bob, Person ]
+
+then
+
+AT +++ BT = TClafer [ Person ]
+AT *** BT = TClafer [ Person ]
+
+
+Unrestricted Intersections
+==========================
+
+http://www.cs.cmu.edu/~joshuad/papers/intcomp/Dunfield12_elaboration.pdf
+
+Subtyping Union Types
+http://www.pps.univ-paris-diderot.fr/~vouillon/publi/subtyping-csl.pdf
+-}
src/Language/ClaferT.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE RankNTypes #-}
 {-
- Copyright (C) 2012-2014 Kacper Bak, Jimmy Liang, Michal Antkiewicz <http://gsd.uwaterloo.ca>
+ Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang, Michal Antkiewicz <http://gsd.uwaterloo.ca>
 
  Permission is hereby granted, free of charge, to any person obtaining a copy of
  this software and associated documentation files (the "Software"), to deal in
test/Functions.hs view
@@ -1,5 +1,5 @@ {-
- Copyright (C) 2013 Luke Brown <http://gsd.uwaterloo.ca>
+ Copyright (C) 2013-2015 Luke Brown, Michal Antkiewicz <http://gsd.uwaterloo.ca>
 
  Permission is hereby granted, free of charge, to any person obtaining a copy of
  this software and associated documentation files (the "Software"), to deal in
@@ -48,6 +48,13 @@             iModule <- desugar Nothing
             compile iModule
             generate
+
+getCompilerResult :: InputModel -> CompilerResult
+getCompilerResult    model = case compileOneFragment defaultClaferArgs{keep_unused=True} model of
+  Left errors -> error $ show errors
+  Right compilerResultMap -> case Map.lookup Alloy compilerResultMap of
+    Nothing -> error "No Alloy result in the result map"
+    Just compilerResult -> compilerResult
 
 compiledCheck :: Either a b -> Bool
 compiledCheck (Left _) = False
test/Suite/Positive.hs view
@@ -70,7 +70,7 @@         @? "nonempty card test failed. Files contain empty cardinalities after fully compiling")
     where
         getIR (file', (Right (resultMap))) =
-            case Map.lookup Alloy42 resultMap of
+            case Map.lookup Alloy resultMap of
                 Just CompilerResult{claferEnv = ClaferEnv{cIr = Just (iMod, _, _)}} -> [(file', iMod)]
                 _ -> []
         getIR (_, _) = []
@@ -79,5 +79,5 @@ 
 case_stringEqual :: Assertion
 case_stringEqual = do
-    let strMap = stringMap $ fromJust $ Map.lookup Alloy42 $ fromRight $ compileOneFragment defaultClaferArgs "A\n    text1 -> string = \"some text\"\n    text2 -> string = \"some text\""
+    let strMap = stringMap $ fromJust $ Map.lookup Alloy $ fromRight $ compileOneFragment defaultClaferArgs "A\n    text1 -> string = \"some text\"\n    text2 -> string = \"some text\""
     (Map.size strMap) == 1 @? "Error: same string assigned to differnet numbers!"
test/Suite/Redefinition.hs view
@@ -60,8 +60,8 @@ case_NestedInheritanceMatchTest :: Assertion
 case_NestedInheritanceMatchTest = case compileOneFragment defaultClaferArgs model of
     Left errors -> assertFailure $ show errors
-    Right compilerResultMap -> case M.lookup Alloy42 compilerResultMap of
-        Nothing -> assertFailure "No Alloy42 result in the result map"
+    Right compilerResultMap -> case M.lookup Alloy compilerResultMap of
+        Nothing -> assertFailure "No Alloy result in the result map"
         Just compilerResult -> let
                 uidIClaferMap' :: StringMap IClafer
                 uidIClaferMap' = uidIClaferMap $ claferEnv compilerResult
test/Suite/SimpleScopeAnalyser.hs view
@@ -131,7 +131,7 @@     let
         -- use simple scope inference
         (Right compilerResultMap) = compileOneFragment defaultClaferArgs model
-        (Just compilerResult) = M.lookup Alloy42 compilerResultMap
+        (Just compilerResult) = M.lookup Alloy compilerResultMap
         computedScopesSet :: M.Map UID Integer
         computedScopesSet = M.fromList $ scopesList compilerResult
 
@@ -146,7 +146,7 @@     let
         -- use simple scope inference
         (Right compilerResultMap) = compileOneFragment defaultClaferArgs model
-        (Just compilerResult) = M.lookup Alloy42 compilerResultMap
+        (Just compilerResult) = M.lookup Alloy compilerResultMap
         Just (iModule, _, _) = cIr $ claferEnv compilerResult
 
         qNameMaps = deriveQNameMaps iModule
+ test/Suite/TypeSystem.hs view
@@ -0,0 +1,89 @@+{-# LANGUAGE TemplateHaskell #-}
+{-
+ Copyright (C) 2015 Michal Antkiewicz <http://gsd.uwaterloo.ca>
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
+ this software and associated documentation files (the "Software"), to deal in
+ the Software without restriction, including without limitation the rights to
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is furnished to do
+ so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+-}
+module Suite.TypeSystem (tg_Test_Suite_TypeSystem) where
+
+import Language.Clafer
+import Language.ClaferT
+import Language.Clafer.Common
+import Language.Clafer.Intermediate.Intclafer
+import Language.Clafer.Intermediate.TypeSystem
+
+import Functions
+
+import qualified Data.Map as M
+import Data.Maybe (isJust)
+import Data.StringMap
+import Test.Tasty
+import Test.Tasty.HUnit
+import Test.Tasty.TH
+
+tg_Test_Suite_TypeSystem :: TestTree
+tg_Test_Suite_TypeSystem = $(testGroupGenerator)
+
+model :: String
+model = unlines
+    [ "abstract A"             -- c0_A
+    , "    abstract as -> A *" -- c0_as
+    , "abstract B : A"         -- c0_B
+    , "    as : as -> B *"     -- c1_as
+    , "b : B"                  -- c0_b
+    , "    [ as = b ]"
+    , "    [ as.ref = b ]"
+    ]
+
+case_TypeSystemTest :: Assertion
+case_TypeSystemTest = case compileOneFragment defaultClaferArgs{keep_unused=True} model of
+  Left errors -> assertFailure $ show errors
+  Right compilerResultMap -> case M.lookup Alloy compilerResultMap of
+    Nothing -> assertFailure "No Alloy result in the result map"
+    Just compilerResult ->
+      let
+        um' :: StringMap IClafer
+        um' = uidIClaferMap $ claferEnv compilerResult
+
+        root_TClafer = getTClaferByUID um' "root"
+        clafer_TClafer = getTClaferByUID um' "clafer"
+        c0_A_TClafer = getTClaferByUID um' "c0_A"
+        c0_A_TClaferR = Just $ TClafer [ "c0_A" ]
+        c0_A_TMap = getDrefTMapByUID um' "c0_A"
+        c0_as_TMap = getDrefTMapByUID um' "c0_as"
+        c0_as_TMapR = Just (TMap {_so = TClafer {_hi = ["c0_as"]}, _ta = TClafer {_hi = ["c0_A"]}})
+        c0_B_TClafer = getTClaferByUID um' "c0_B"
+        c0_B_TClaferR = Just $ TClafer [ "c0_B", "c0_A" ]
+        c1_as_TClafer = getTClaferByUID um' "c1_as"
+        c1_as_TClaferR = Just $ TClafer [ "c1_as", "c0_as" ]
+        c1_as_TMap = getDrefTMapByUID um' "c1_as"
+        c1_as_TMapR = Just (TMap {_so = TClafer {_hi = ["c1_as","c0_as"]}, _ta = TClafer {_hi = [ "c0_B", "c0_A" ]}})
+        c0_b_TClafer = getTClaferByUID um' "c0_b"
+        c0_b_TClaferR = Just $ TClafer [ "c0_b", "c0_B", "c0_A" ]
+      in do
+        (isJust $ findIClafer um' "c0_A")    @? ("Clafer c0_A not found" ++ show um')
+        root_TClafer == Just rootTClafer     @? ("Incorrect class type for 'root':\ngot        '" ++ show root_TClafer ++ "'\ninstead of '" ++ show rootTClafer ++ "'")
+        clafer_TClafer == Just claferTClafer @? ("Incorrect class type for 'clafer':\ngot        '" ++ show clafer_TClafer ++ "'\ninstead of '" ++ show claferTClafer ++ "'")
+        c0_A_TClafer == c0_A_TClaferR        @? ("Incorrect class type for 'c0_A':\ngot        '" ++ show c0_A_TClafer ++ "'\ninstead of '" ++ show c0_A_TClaferR ++ "'")
+        c0_A_TMap == Nothing                 @? ("Incorrect map type for 'c0_A':\ngot        '" ++ show c0_A_TMap ++ "'\nbut it is \nt a reference.")
+        c0_as_TMap == c0_as_TMapR            @? ("Incorrect map type for 'c0_as':\ngot        '" ++ show c0_as_TMap ++ "'\ninstead of '" ++ show c0_as_TMapR ++ "'")
+        c0_B_TClafer == c0_B_TClaferR        @? ("Incorrect class type for 'c0_B':\ngot        '" ++ show c0_B_TClafer ++ "'\ninstead of '" ++ show c0_B_TClaferR ++ "'")
+        c1_as_TClafer == c1_as_TClaferR      @? ("Incorrect class type for 'c1_as':\ngot        '" ++ show c1_as_TClafer ++ "'\ninstead of '" ++ show c1_as_TClaferR ++ "'")
+        c1_as_TMap == c1_as_TMapR            @? ("Incorrect map type for 'c1_as':\ngot        '" ++ show c1_as_TMap ++ "'\ninstead of '" ++ show c1_as_TMapR ++ "'")
+        c0_b_TClafer == c0_b_TClaferR        @? ("Incorrect class type for 'c0_b':\ngot        '" ++ show c0_b_TClafer ++ "'\ninstead of '" ++ show c0_b_TClaferR ++ "'")
+ test/doctests.hs view
@@ -0,0 +1,4 @@+import Test.DocTest
+
+main :: IO ()
+main = doctest ["-isrc", "src/Language/Clafer/Intermediate/TypeSystem.hs"]
test/test-suite.hs view
@@ -33,6 +33,7 @@ import Suite.Negative
 import Suite.SimpleScopeAnalyser
 import Suite.Redefinition
+import Suite.TypeSystem
 import Functions
 import Test.Tasty
 import Test.Tasty.HUnit
@@ -43,7 +44,8 @@ 
 main :: IO ()
 main = defaultMain $ testGroup "Tests"
-    [ tg_Test_Suite_Redefinition
+    [ tg_Test_Suite_TypeSystem
+    , tg_Test_Suite_Redefinition
     , tg_Main_Test_Suite
     , tg_Test_Suite_Positive
     , tg_Test_Suite_Negative
@@ -74,7 +76,7 @@ case_FQMapLookup :: Assertion
 case_FQMapLookup = do
     let
-        (Just (iModule, _, _)) = cIr $ claferEnv $ fromJust $ Map.lookup Alloy42 $ fromRight $ compileOneFragment defaultClaferArgs model
+        (Just (iModule, _, _)) = cIr $ claferEnv $ fromJust $ Map.lookup Alloy $ fromRight $ compileOneFragment defaultClaferArgs model
         qNameMaps = deriveQNameMaps iModule
     [ "c0_a" ] == getUIDs qNameMaps "::a"  @? "UID for `::a` different from `c0_a`"
     [ "c0_b" ] == getUIDs qNameMaps "::a::b"  @? "UID for `::a::b` different from `c0_b`"
@@ -94,7 +96,7 @@ case_AllClafersGenerics :: Assertion
 case_AllClafersGenerics = do
     let
-        (Just (iModule, _, _)) = cIr $ claferEnv $ fromJust $ Map.lookup Alloy42 $ fromRight $ compileOneFragment defaultClaferArgs model
+        (Just (iModule, _, _)) = cIr $ claferEnv $ fromJust $ Map.lookup Alloy $ fromRight $ compileOneFragment defaultClaferArgs model
         allClafers :: [ IClafer ]
         allClafers = universeOn biplate iModule
         allClafersUids = map _uid allClafers
tools/Makefile view
@@ -17,6 +17,5 @@ 		mv alloy4.2_2015-02-22.jar alloy4.2.jar; \
 	fi
 
-	javac  XsdCheck.java
 clean:
 	find . -type f -name '*.class' -print0 | xargs -0 rm -f
− tools/XsdCheck.class

binary file changed (1787 → absent bytes)

− tools/XsdCheck.java
@@ -1,47 +0,0 @@-import java.io.File;
-import java.io.IOException;
-import javax.xml.transform.Source;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-import javax.xml.validation.Validator;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-/**
- * Reads in a XSD schema and a XML file and validates the document
- * against the schema.
- *
- * @author Jimmy Liang
- */
-public class XsdCheck {
-
-    public static void main(String[] args) throws IOException {
-        if (args.length < 2) {
-            System.out.println("Requires two arguments: <xsd-file> <xml-file>");
-            System.exit(1);
-        }
-
-        File xsd = new File(args[0]);
-        File xml = new File(args[1]);
-
-        SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
-
-        try {
-            Schema schema = factory.newSchema(xsd);
-
-            Validator validator = schema.newValidator();
-
-            Source source = new StreamSource(xml);
-
-            validator.validate(source);
-        } catch (SAXParseException e) {
-            System.out.println("XML Validation error on line " + e.getLineNumber() + ", column " + e.getColumnNumber());
-            System.out.println(e.getMessage());
-        } catch (SAXException e) {
-            System.out.println("XML Validation error.");
-            System.out.println(e.getMessage());
-        }
-    }
-}
-