diff --git a/src-ag/InterfacesRules.lag b/src-ag/InterfacesRules.lag
new file mode 100644
--- /dev/null
+++ b/src-ag/InterfacesRules.lag
@@ -0,0 +1,451 @@
+\begin{Code}
+PRAGMA strictdata
+PRAGMA optimize
+PRAGMA bangpats
+PRAGMA strictwrap
+
+INCLUDE "Interfaces.ag"
+
+imports
+{
+import Interfaces
+import CodeSyntax
+import GrammarInfo
+
+import qualified Data.Sequence as Seq
+import Data.Sequence(Seq)
+import qualified Data.Map as Map
+import Data.Map(Map)
+import Data.Tree(Tree(Node), Forest)
+import Data.Graph(Graph, dfs, edges, buildG, transposeG)
+import Data.Maybe (fromJust)
+import Data.List (partition,transpose,(\\),nub,findIndex)
+import Data.Array ((!),inRange,bounds,assocs)
+import Data.Foldable(toList)
+}
+\end{Code}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Visit sub-sequence-graph}
+
+Visit sub-sequences can be generated from the |Tdp| by a topological
+sort. To that end we add vertices to |Tdp|. For each production, for
+each child, for each visit to that child, we add a vertex $v$.
+
+We add the following edges:
+
+\begin{enumerate}
+
+    \item From the inherited attributes passed to the visit to $v$,
+    because these attributes need to be computed before visiting $v$.
+
+    \item From the synthesized attributes computed by the visit to
+    $v$, because a visit to $v$ computes these attributes.
+
+    \item From the previous visit to $v$, because we can only visit
+    $c$ for the $i$-th time if we have visited it the $(i-1)$-th time.
+
+\end{enumerate}
+
+Now we can define a visit sub-sequence as a list of vertices:
+
+\begin{Code}
+{
+type VisitSS = [Vertex]
+}
+\end{Code}
+
+We define a function that generates the visit-subsequences-graph and a
+description of the newly added vertices. We do this using an attribute
+grammar. The visit subsequences graph has transposed edges, so we can
+use |topSort'|.
+
+\begin{Code}
+ATTR IRoot [ tdp : Graph | | ]
+SEM  IRoot
+  |  IRoot loc.newedges = toList @inters.newedges
+           loc.visitssGraph =  let graph = buildG (0,@inters.v-1) es
+                                   es = @newedges ++ edges @lhs.tdp
+                               in transposeG graph
+\end{Code}
+
+As we will need to look up information, we pass |info| down. An
+attribute v stores a fresh vertex. We start counting from the hightest
+vertex in |tdp|.
+
+\begin{Code}
+ATTR Interfaces Interface Segments Segment [ | v : Vertex | ]
+ATTR IRoot Interfaces Interface Segments Segment [ info : Info | | ]
+SEM  IRoot
+  |  IRoot inters.v = snd (bounds @lhs.tdp) + 1
+\end{Code}
+
+The actual generation of edges takes place in |Segment|. We group the
+attribute occurrences. |isEqualField| checks are at the same position
+(either lhs of the same child).
+
+\begin{Code}
+{
+gather :: Info -> [Vertex] -> [[Vertex]]
+gather info =  eqClasses comp
+               where comp a b = isEqualField (ruleTable info ! a) (ruleTable info ! b)
+}
+\end{Code}
+
+When we do this for right-hand side occurrences of the inherited and
+syntesized attributes of a |Segment|, we find the new vertices.
+
+\begin{Code}
+SEM  Segment
+  |  Segment  loc.look : {Vertex -> CRule}
+              loc.look = \a -> ruleTable @lhs.info ! a
+
+              loc.occurAs : {(CRule -> Bool) -> [Vertex] -> [Vertex]}
+              loc.occurAs = \p us -> [ a  |  u <- us
+                                          ,  a <- tdsToTdp @lhs.info ! u
+                                          ,  p (@look a)]
+              loc.groups : {[([Vertex],[Vertex])]}
+              loc.groups =  let group as = gather @lhs.info (@occurAs isRhs as)
+                            in map (partition (isInh . @look)) (group (@inh ++ @syn))
+              loc.v : {Int}
+              loc.v = @lhs.v + length @groups
+              loc.newvertices = [@lhs.v .. @loc.v-1]
+\end{Code}
+
+A description of the new vertices van be found by looking up the field
+of an attribute occurrence
+
+\begin{Code}
+ATTR  Interfaces Interface Segments Segment
+      [ visitDescr : {Map Vertex ChildVisit} | | ]
+SEM  IRoot
+  |  IRoot  inters.visitDescr = Map.fromList @descr
+ATTR  Interfaces Interface Segments Segment
+      [ | |  newedges USE {Seq.><} {Seq.empty} : {Seq Edge }
+             descr USE {Seq.><} {Seq.empty} : {Seq (Vertex,ChildVisit)} ]
+SEM  Segment
+  |  Segment lhs.descr =  Seq.fromList $ zipWith (cv @look @lhs.n) @newvertices @groups {-$-}
+
+{
+-- Only non-empty syn will ever be forced, because visits with empty syn are never performed
+-- Right hand side synthesized attributes always have a field
+cv :: (Vertex -> CRule) -> Int -> Vertex -> ([Vertex],[Vertex]) -> (Vertex,ChildVisit)
+cv look n v (inh,syn) =  let  fld = getField (look (head syn))
+                              rnt = fromJust (getRhsNt (look (head syn)))
+                              d = ChildVisit fld rnt n inh syn
+                         in (v,d)
+}
+\end{Code}
+
+\begin{Code}
+SEM  IRoot
+  |  IRoot loc.descr = toList @inters.descr
+\end{Code}
+
+The edges between attributes occurrences and their corresponding
+visits can be found as follows:
+
+\begin{Code}
+SEM  Segment
+  |  Segment loc.attredges = concat (zipWith ed @newvertices @groups)
+
+{
+ed :: Vertex -> ([Vertex], [Vertex]) -> [(Vertex, Vertex)]
+ed v (inh,syn) = map (\i -> (i,v)) inh ++ map (\s -> (v,s)) syn
+}
+\end{Code}
+
+For edges between visits we simpy |zip| the current vertices with the
+next ones.
+
+\begin{Code}
+ATTR Segment [ nextNewvertices : {[Vertex]} | | newvertices : {[Vertex]} ]
+ATTR Segments [ | | newvertices : {[Vertex]} ]
+SEM  Segments
+  |  Cons  hd.nextNewvertices = @tl.newvertices
+           lhs.newvertices = @hd.newvertices
+  |  Nil   lhs.newvertices = []
+
+SEM  Segment
+  |  Segment  loc.visitedges = zip @newvertices @lhs.nextNewvertices
+              lhs.newedges = Seq.fromList @attredges Seq.>< Seq.fromList @visitedges
+\end{Code}
+
+The first visit to a child is passed to the first visit of the parent,
+so we add edges for this, too.
+
+\begin{Code}
+ATTR Segments Segment [ | | groups : {[([Vertex],[Vertex])]} ]
+SEM  Segments
+  |  Cons lhs.groups = @hd.groups
+  |  Nil  lhs.groups = []
+SEM  Interface
+  |  Interface  seg.v = @lhs.v
+                loc.v = @seg.v + length @seg.newvertices
+                lhs.v = @loc.v
+                loc.firstvisitvertices = [@seg.v .. @v-1]
+                loc.newedges = zip @firstvisitvertices @seg.newvertices
+                lhs.newedges = @seg.newedges Seq.>< Seq.fromList @newedges
+
+                loc.look : {Vertex -> CRule}
+                loc.look = \a -> ruleTable @lhs.info ! a
+                loc.descr = zipWith (cv @look (-1)) @firstvisitvertices @seg.groups
+                lhs.descr = @seg.descr Seq.>< Seq.fromList @descr
+\end{Code}
+
+The visit number can simply be counted
+
+\begin{Code}
+ATTR Segments Segment [ n : Int | | ]
+SEM  Interface
+  |  Interface seg.n = 0
+SEM  Segments
+  |  Cons tl.n = @lhs.n + 1
+\end{Code}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Visit sub-sequences}
+
+To compute the visit subsequences, we pass the visit-subsequence graph down
+
+\begin{Code}
+ATTR Interfaces Interface Segments Segment [ vssGraph : Graph | | ]
+SEM  IRoot
+  |  IRoot inters.vssGraph = @visitssGraph
+\end{Code}
+
+Each segment computes subsequences for each production of the
+nonterminal. We group the occurrences of the synthesized attributes,
+and perform a topological sort on it. In the absence of synthesized
+attributes, nothing needs to be computed, so the visit subsequence
+is empty.
+
+\begin{Code}
+SEM  Segment
+  |  Segment  loc.synOccur = gather @lhs.info (@occurAs isLhs @syn)
+              loc.vss =  let hasCode' v | inRange (bounds (ruleTable @lhs.info)) v =  getHasCode (ruleTable @lhs.info ! v)
+                                        | otherwise = True
+                         in if  null @syn
+                                then replicate (length @lhs.cons) []
+                                else map (filter hasCode' . topSort' @lhs.vssGraph) @synOccur
+ATTR Segments Segment [ cons : {[ConstructorIdent]} | | ]
+SEM  Interface
+  |  Interface seg.cons = @cons
+\end{Code}
+
+We adapt the topological sort to take a list of vertices to start
+sorting.
+
+\begin{Code}
+{
+postorder :: Tree a -> [a]
+postorder (Node a ts) = postorderF ts ++ [a]
+postorderF :: Forest a -> [a]
+postorderF = concatMap postorder
+postOrd :: Graph -> [Vertex] -> [Vertex]
+postOrd g = postorderF . dfs g
+topSort' :: Graph -> [Vertex] -> [Vertex]
+topSort' g = postOrd g
+}
+\end{Code}
+
+This gives us the subsequence required to compute the synthesized
+attributes. However, a part of this subsequence has already been
+computed in previous visits. We thread this part through. It starts
+with all first visits to children.
+
+\begin{Code}
+ATTR Interfaces Interface [ prev : {[Vertex]} | | firstvisitvertices USE {++} {[]} : {[Vertex]} ]
+SEM  IRoot
+  |  IRoot inters.prev =  let terminals = [ v | (v,cr) <- assocs (ruleTable @lhs.info), not (getHasCode cr), isLocal cr ]
+                          in @inters.firstvisitvertices ++ terminals
+
+ATTR Segments Segment [ | prev : {[Vertex]} | ]
+\end{Code}
+
+and we remove this part from the subsequence
+
+\begin{Code}
+SEM  Segment [ | |  visitss : {[VisitSS]} ]
+  |  Segment  loc.visitss' = map (\\ @lhs.prev) @vss
+              loc.defined =  let defines v = case Map.lookup v @lhs.visitDescr of
+                                               Nothing -> [v]
+                                               Just (ChildVisit _ _ _ inh _) -> v:inh
+                             in concatMap (concatMap defines) @visitss
+              lhs.prev = @lhs.prev ++ @defined
+\end{Code}
+
+When more that one attribute is defined in the same rule, this rule is
+repeated in the visit subsequence. We do not want this.
+
+\begin{Code}
+SEM  Segment
+  |  Segment  loc.visitss : {[[Vertex]]}
+              loc.visitss = let  rem' :: [(Identifier,Identifier,Maybe Type)] -> [Vertex] -> [Vertex]
+                                 rem' _ [] = []
+                                 rem' prev (v:vs)
+                                   | inRange (bounds table) v
+                                       = let  cr = table ! v
+                                              addV = case findIndex cmp prev of
+                                                       Just _ -> id
+                                                       _      -> (v:)
+                                              cmp (fld,attr,tp) = getField cr == fld && getAttr cr == attr && sameNT (getType cr) tp
+                                              sameNT (Just (NT ntA _ _)) (Just (NT ntB _ _)) = ntA == ntB
+                                              sameNT _          _                            = False
+                                              def = Map.elems (getDefines cr)
+                                         in addV (rem' (def ++ prev) vs)
+                                   | otherwise = v:rem' prev vs
+                                 table = ruleTable @lhs.info
+                            in map (rem' []) @visitss'
+\end{Code}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Intra-visit dependencies}
+
+We ignore terminals, they need to be passed from the first visit up to
+where they are needed. Intra-visit dependencies descibe what a visit
+needs from its previous visits. The first visit does not have
+intra-visit dependencies, because there are no previous visits. We add
+an attribute that indicates whether it's the first visit.
+
+\begin{Code}
+ATTR Segment Segments [ isFirst : {Bool} | | ]
+SEM  Interface
+  |  Interface seg.isFirst = True
+SEM  Segments
+  |  Cons tl.isFirst = False
+\end{Code}
+
+We declare an attribute intravisit which gives the intra-visit
+dependencies. We pass the intravisit of the next visit to this
+one.
+\begin{Code}
+{
+type IntraVisit = [Vertex]
+}
+
+ATTR Segment [ nextIntravisits : {[IntraVisit]} | |  intravisits : {[IntraVisit]} ]
+SEM  Segments [ | | hdIntravisits : {[IntraVisit]} ]
+  |  Cons  hd.nextIntravisits = @tl.hdIntravisits
+           lhs.hdIntravisits = @hd.intravisits
+  |  Nil lhs.hdIntravisits = repeat []
+\end{Code}
+
+The first visit does not have intra-visit dependencies. A later visit
+need all attributes that it's subsequence depends on, and the
+intra-visit dependecies of the next visit, except for those attributes
+that are compted in this visit.
+
+\begin{Code}
+ATTR IRoot [ dpr : {[Edge]} | | ]
+ATTR Interfaces Interface Segments Segment [ ddp : Graph | | ]
+SEM  IRoot
+  |  IRoot inters.ddp = buildG (0,@inters.v-1) (map swap (@lhs.dpr ++ @newedges))
+
+{
+swap :: (a,b) -> (b,a)
+swap (a,b) = (b,a)
+}
+
+ATTR Segments Segment [ fromLhs : {[Vertex]} | | ]
+SEM  Interface
+  |  Interface seg.fromLhs = @lhs.prev
+SEM  Segments
+  |  Cons  hd.fromLhs = @lhs.fromLhs
+           tl.fromLhs = []
+SEM  Segment
+  |  Segment  loc.fromLhs = @occurAs isLhs @inh ++ @lhs.fromLhs
+              loc.computed =  let computes v = case Map.lookup v @lhs.visitDescr of
+                                                 Nothing -> Map.keys (getDefines (ruleTable @lhs.info ! v))
+                                                 Just (ChildVisit _ _ _ _ syn) -> v:syn
+                              in concatMap (concatMap computes) @visitss
+              loc.intravisits = zipWith @iv @visitss @lhs.nextIntravisits
+              loc.iv =  \vs next ->
+                          let needed = concatMap (@lhs.ddp !) vs
+                          in nub (needed ++ next) \\ (@fromLhs ++ @computed)
+\end{Code}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Result}
+
+Our resulting datastructure is:
+
+Now we pass the visit sub-sequences up. In |Interface|, |@seg.visitss|
+gives us for each segment, for each production a subsequence. What we
+want is for each production, for each visit a subsequence, which is
+accomplished by |transpose|. The same is done for intravisits.
+
+\begin{Code}
+ATTR Interfaces Interface Segments Segment [ allInters : {CInterfaceMap} | | ]
+SEM  IRoot
+  |  IRoot  inters.allInters = @inters.inters
+
+ATTR  IRoot Interfaces [ | | inters : {CInterfaceMap}
+                             visits : {CVisitsMap} ]
+SEM Interfaces
+  |  Cons  lhs.inters = Map.insert @hd.nt @hd.inter @tl.inters
+           lhs.visits = Map.insert @hd.nt @hd.visits @tl.visits
+  |  Nil   lhs.inters = Map.empty
+           lhs.visits = Map.empty
+
+SEM  Interface [ | | nt : NontermIdent ]
+  |  Interface lhs.nt = @nt
+
+SEM  Interface [ | | inter : CInterface
+                     visits : {Map ConstructorIdent CVisits} ]
+  |  Interface  lhs.inter = CInterface @seg.segs
+                lhs.visits = Map.fromList (zip @cons (transpose @seg.cvisits))
+
+SEM  Segments [ | | segs : CSegments
+                    cvisits USE {:} {[]} : {[[CVisit]]} ] -- For each visit, for each constructor the CVisit
+  |  Cons  lhs.segs = @hd.seg : @tl.segs
+  |  Nil   lhs.segs = []
+
+SEM  Segment [ | | seg : CSegment
+                   cvisits : {[CVisit]} ] -- For this visit, for each constructor the CVisit
+  |  Segment  lhs.seg = -- A fake dependency fixes a type-3 cycle
+                        if False then undefined @lhs.vssGraph @lhs.visitDescr @lhs.prev else CSegment @inhmap @synmap
+              loc.inhmap : {Map Identifier Type}
+              loc.synmap : {Map Identifier Type}
+              loc.(inhmap,synmap) = let makemap = Map.fromList . map findType
+                                        findType v = getNtaNameType (attrTable @lhs.info ! v)
+                                    in (makemap @inh,makemap @syn)
+              lhs.cvisits = let  mkVisit vss intra = CVisit @inhmap @synmap (mkSequence vss) (mkSequence intra) True
+                                 mkSequence = map mkRule
+                                 mkRule v = case Map.lookup v @lhs.visitDescr of
+                                              Nothing -> ruleTable @lhs.info ! v
+                                              Just (ChildVisit name nt n _ _) -> ccv name nt n @lhs.allInters
+                            in zipWith mkVisit @visitss @intravisits
+
+{
+ccv :: Identifier -> NontermIdent -> Int -> CInterfaceMap -> CRule
+ccv name nt n table
+  =  CChildVisit name nt n inh syn lst
+     where  CInterface segs = Map.findWithDefault (error ("InterfacesRules::ccv::interfaces not in table for nt: " ++ show nt)) nt table
+            (seg:remain) = drop n segs
+            CSegment inh syn = seg
+            lst = null remain
+}
+\end{Code}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{EDP}
+
+To find a type-3 cycle we need to know the dependencies that the
+interfaces generate.
+
+\begin{Code}
+ATTR Interfaces Interface Segments Segment [ | | edp USE {Seq.><} {Seq.empty} : {Seq Edge} ]
+SEM  Segment
+  |  Segment lhs.edp =  Seq.fromList [(i,s) | i <- @inh, s <- @syn]
+                        Seq.>< Seq.fromList [(s,i) | s <- @syn, i <- @lhs.nextInh ]
+SEM  IRoot [ | | edp : {[Edge]} ]
+  |  IRoot  lhs.edp = toList @inters.edp
+SEM  Segment  [ nextInh : {[Vertex]} | | inh : {[Vertex]} ]
+  |  Segment lhs.inh = @inh
+SEM  Segments [ | | firstInh : {[Vertex]} ]
+  |  Cons  hd.nextInh = @tl.firstInh
+           lhs.firstInh = @hd.inh
+  |  Nil  lhs.firstInh = []
+\end{Code}
+
diff --git a/src-generated/AbstractSyntax.hs b/src-generated/AbstractSyntax.hs
--- a/src-generated/AbstractSyntax.hs
+++ b/src-generated/AbstractSyntax.hs
@@ -1,6 +1,6 @@
 
 
--- UUAGC 0.9.53 (src-ag/AbstractSyntax.ag)
+-- UUAGC 0.9.56 (src-ag/AbstractSyntax.ag)
 module AbstractSyntax where
 {-# LINE 2 "src-ag/AbstractSyntax.ag" #-}
 
diff --git a/src-generated/Code.hs b/src-generated/Code.hs
--- a/src-generated/Code.hs
+++ b/src-generated/Code.hs
@@ -1,6 +1,6 @@
 
 
--- UUAGC 0.9.53 (src-ag/Code.ag)
+-- UUAGC 0.9.56 (src-ag/Code.ag)
 module Code where
 {-# LINE 2 "src-ag/Code.ag" #-}
 
diff --git a/src-generated/CodeSyntax.hs b/src-generated/CodeSyntax.hs
--- a/src-generated/CodeSyntax.hs
+++ b/src-generated/CodeSyntax.hs
@@ -1,6 +1,6 @@
 
 
--- UUAGC 0.9.53 (src-ag/CodeSyntax.ag)
+-- UUAGC 0.9.56 (src-ag/CodeSyntax.ag)
 module CodeSyntax where
 {-# LINE 2 "src-ag/CodeSyntax.ag" #-}
 
diff --git a/src-generated/ConcreteSyntax.hs b/src-generated/ConcreteSyntax.hs
--- a/src-generated/ConcreteSyntax.hs
+++ b/src-generated/ConcreteSyntax.hs
@@ -1,6 +1,6 @@
 
 
--- UUAGC 0.9.53 (src-ag/ConcreteSyntax.ag)
+-- UUAGC 0.9.56 (src-ag/ConcreteSyntax.ag)
 module ConcreteSyntax where
 {-# LINE 2 "src-ag/ConcreteSyntax.ag" #-}
 
diff --git a/src-generated/DeclBlocks.hs b/src-generated/DeclBlocks.hs
--- a/src-generated/DeclBlocks.hs
+++ b/src-generated/DeclBlocks.hs
@@ -1,6 +1,6 @@
 
 
--- UUAGC 0.9.53 (src-ag/DeclBlocks.ag)
+-- UUAGC 0.9.56 (src-ag/DeclBlocks.ag)
 module DeclBlocks where
 {-# LINE 2 "src-ag/DeclBlocks.ag" #-}
 
diff --git a/src-generated/ErrorMessages.hs b/src-generated/ErrorMessages.hs
--- a/src-generated/ErrorMessages.hs
+++ b/src-generated/ErrorMessages.hs
@@ -1,6 +1,6 @@
 
 
--- UUAGC 0.9.53 (src-ag/ErrorMessages.ag)
+-- UUAGC 0.9.56 (src-ag/ErrorMessages.ag)
 module ErrorMessages where
 {-# LINE 2 "src-ag/ErrorMessages.ag" #-}
 
diff --git a/src-generated/ExecutionPlan.hs b/src-generated/ExecutionPlan.hs
--- a/src-generated/ExecutionPlan.hs
+++ b/src-generated/ExecutionPlan.hs
@@ -1,6 +1,6 @@
 
 
--- UUAGC 0.9.53 (src-ag/ExecutionPlan.ag)
+-- UUAGC 0.9.56 (src-ag/ExecutionPlan.ag)
 module ExecutionPlan where
 {-# LINE 2 "src-ag/ExecutionPlan.ag" #-}
 
diff --git a/src-generated/Expression.hs b/src-generated/Expression.hs
--- a/src-generated/Expression.hs
+++ b/src-generated/Expression.hs
@@ -1,6 +1,6 @@
 
 
--- UUAGC 0.9.53 (src-ag/Expression.ag)
+-- UUAGC 0.9.56 (src-ag/Expression.ag)
 module Expression where
 {-# LINE 2 "src-ag/Expression.ag" #-}
 
diff --git a/src-generated/HsToken.hs b/src-generated/HsToken.hs
--- a/src-generated/HsToken.hs
+++ b/src-generated/HsToken.hs
@@ -1,6 +1,6 @@
 
 
--- UUAGC 0.9.53 (src-ag/HsToken.ag)
+-- UUAGC 0.9.56 (src-ag/HsToken.ag)
 module HsToken where
 {-# LINE 2 "src-ag/HsToken.ag" #-}
 
diff --git a/src-generated/Interfaces.hs b/src-generated/Interfaces.hs
--- a/src-generated/Interfaces.hs
+++ b/src-generated/Interfaces.hs
@@ -1,6 +1,6 @@
 
 
--- UUAGC 0.9.53 (src-ag/Interfaces.ag)
+-- UUAGC 0.9.56 (src-ag/Interfaces.ag)
 module Interfaces where
 {-# LINE 2 "src-ag/Interfaces.ag" #-}
 
diff --git a/src-generated/LOAG/Rep.hs b/src-generated/LOAG/Rep.hs
--- a/src-generated/LOAG/Rep.hs
+++ b/src-generated/LOAG/Rep.hs
@@ -1,6 +1,6 @@
 
 
--- UUAGC 0.9.53 (src-ag/LOAG/Rep.ag)
+-- UUAGC 0.9.56 (src-ag/LOAG/Rep.ag)
 module LOAG.Rep where
 
 import CommonTypes
diff --git a/src-generated/Macro.hs b/src-generated/Macro.hs
--- a/src-generated/Macro.hs
+++ b/src-generated/Macro.hs
@@ -1,6 +1,6 @@
 
 
--- UUAGC 0.9.53 (src-ag/Macro.ag)
+-- UUAGC 0.9.56 (src-ag/Macro.ag)
 module Macro where
 {-# LINE 4 "src-ag/Macro.ag" #-}
 
diff --git a/src-generated/Patterns.hs b/src-generated/Patterns.hs
--- a/src-generated/Patterns.hs
+++ b/src-generated/Patterns.hs
@@ -1,6 +1,6 @@
 
 
--- UUAGC 0.9.53 (src-ag/Patterns.ag)
+-- UUAGC 0.9.56 (src-ag/Patterns.ag)
 module Patterns where
 {-# LINE 2 "src-ag/Patterns.ag" #-}
 
diff --git a/src-generated/PrintErrorMessages.hs b/src-generated/PrintErrorMessages.hs
--- a/src-generated/PrintErrorMessages.hs
+++ b/src-generated/PrintErrorMessages.hs
@@ -260,7 +260,7 @@
                                    help = text ""
                                    act  = text action_
                                 in ppError (isError _lhsIoptions _me) pos_ mesg pat help act _lhsIverbose
-                               {-# LINE 264 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 264 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule1 #-}
    rule1 = \ action_ pos_ problem_ ->
      ParserError pos_ problem_ action_
@@ -287,7 +287,7 @@
    rule3 = \ ((_lhsIverbose) :: Bool) msg_ pos_ ->
                                {-# LINE 84 "src-ag/PrintErrorMessages.ag" #-}
                                ppError True pos_ (text msg_) (text "") (text "") (text "Correct the syntax of the Haskell code.") _lhsIverbose
-                               {-# LINE 291 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 291 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule4 #-}
    rule4 = \ msg_ pos_ ->
      HsParseError pos_ msg_
@@ -331,7 +331,7 @@
                                                 ,"is considered valid. All other alternatives have been discarded."
                                                 ]
                                in ppError (isError _lhsIoptions _me) (getPos con_) mesg pat help act _lhsIverbose
-                               {-# LINE 335 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 335 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule7 #-}
    rule7 = \ con_ nt_ occ1_ ->
      DupAlt nt_ con_ occ1_
@@ -373,7 +373,7 @@
                                    act  = wfill [ "The clashing type synonym will be ignored."
                                                 ]
                                in ppError (isError _lhsIoptions _me)  (getPos nt_) mesg pat help act _lhsIverbose
-                               {-# LINE 377 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 377 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule10 #-}
    rule10 = \ nt_ occ1_ ->
      DupSynonym nt_ occ1_
@@ -414,7 +414,7 @@
                                    act  = wfill [ "The clashing nonterminal set will be ignored."
                                                 ]
                                in ppError (isError _lhsIoptions _me)  (getPos name_) mesg pat help act _lhsIverbose
-                               {-# LINE 418 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 418 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule13 #-}
    rule13 = \ name_ occ1_ ->
      DupSet name_ occ1_
@@ -456,7 +456,7 @@
                                                 ,"All others have been discarded. The generated program will probably not run."
                                                 ]
                                in ppError (isError _lhsIoptions _me) (getPos attr_) mesg pat help act _lhsIverbose
-                               {-# LINE 460 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 460 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule16 #-}
    rule16 = \ attr_ nt_ occ1_ ->
      DupInhAttr nt_ attr_ occ1_
@@ -498,7 +498,7 @@
                                                 ,"All others have been discarded. The generated program will probably not run."
                                                 ]
                                in ppError (isError _lhsIoptions _me) (getPos attr_) mesg pat help act _lhsIverbose
-                               {-# LINE 502 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 502 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule19 #-}
    rule19 = \ attr_ nt_ occ1_ ->
      DupSynAttr nt_ attr_ occ1_
@@ -541,7 +541,7 @@
                                                 ,"All others have been discarded."
                                                 ]
                                in ppError (isError _lhsIoptions _me) (getPos name_) mesg pat help act _lhsIverbose
-                               {-# LINE 545 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 545 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule22 #-}
    rule22 = \ con_ name_ nt_ occ1_ ->
      DupChild nt_ con_ name_ occ1_
@@ -582,7 +582,7 @@
                                                          ]
                                    act  = wfill ["The last rule given is considered valid. All others have been discarded."]
                                in ppError (isError _lhsIoptions _me) (getPos attr_) mesg pat help act _lhsIverbose
-                               {-# LINE 586 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 586 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule25 #-}
    rule25 = \ attr_ con_ field_ nt_ occ1_ ->
      DupRule nt_ con_ field_ attr_ occ1_
@@ -620,7 +620,7 @@
                                                          ]
                                    act  = wfill ["Compilation cannot continue."]
                                in ppError (isError _lhsIoptions _me) (getPos nm_) mesg pat help act _lhsIverbose
-                               {-# LINE 624 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 624 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule28 #-}
    rule28 = \ con_ nm_ nt_ ->
      DupRuleName nt_ con_ nm_
@@ -660,7 +660,7 @@
                                                          ]
                                    act  = wfill ["The last typesignature given is considered valid. All others have been discarded."]
                                in ppError (isError _lhsIoptions _me) (getPos attr_) mesg pat help act _lhsIverbose
-                               {-# LINE 664 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 664 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule31 #-}
    rule31 = \ attr_ con_ nt_ ->
      DupSig nt_ con_ attr_
@@ -694,7 +694,7 @@
                                                          ]
                                    act  = wfill ["Everything regarding the unknown nonterminal has been ignored."]
                                in ppError (isError _lhsIoptions _me) (getPos nt_) mesg pat help act _lhsIverbose
-                               {-# LINE 698 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 698 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule34 #-}
    rule34 = \ nt_ ->
      UndefNont nt_
@@ -730,7 +730,7 @@
                                                          ]
                                    act  = wfill ["All rules for the unknown alternative have been ignored."]
                                in ppError (isError _lhsIoptions _me) (getPos con_) mesg pat help act _lhsIverbose
-                               {-# LINE 734 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 734 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule37 #-}
    rule37 = \ con_ nt_ ->
      UndefAlt nt_ con_
@@ -769,7 +769,7 @@
                                                          ]
                                    act  = wfill ["All rules for the unknown field have been ignored."]
                                in ppError (isError _lhsIoptions _me) (getPos name_) mesg pat help act _lhsIverbose
-                               {-# LINE 773 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 773 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule40 #-}
    rule40 = \ con_ name_ nt_ ->
      UndefChild nt_ con_ name_
@@ -806,7 +806,7 @@
                                                  ]
                                    act  = wfill ["The value of the attribute has been set to undefined."]
                                in ppError (isError _lhsIoptions _me) (getPos attr_) mesg pat help act _lhsIverbose
-                               {-# LINE 810 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 810 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule43 #-}
    rule43 = \ attr_ con_ field_ nt_ ->
      MissingRule nt_ con_ field_ attr_
@@ -842,7 +842,7 @@
                                                     ]
                                       act  = wfill ["Compilation cannot continue."]
                                   in ppError (isError _lhsIoptions _me) (getPos name_) mesg pat help act _lhsIverbose
-                                  {-# LINE 846 "src-generated/PrintErrorMessages.hs"#-}
+                                  {-# LINE 846 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule46 #-}
    rule46 = \ con_ name_ nt_ ->
      MissingNamedRule nt_ con_ name_
@@ -879,7 +879,7 @@
                                                  ]
                                    act  = wfill ["The rule has been ignored."]
                                in ppError (isError _lhsIoptions _me) (getPos attr_) mesg pat help act _lhsIverbose
-                               {-# LINE 883 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 883 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule49 #-}
    rule49 = \ attr_ con_ field_ nt_ ->
      SuperfluousRule nt_ con_ field_ attr_
@@ -918,7 +918,7 @@
                                                  ]
                                    act  = wfill ["The generated program will not run."]
                                in ppError (isError _lhsIoptions _me) (getPos var_) mesg pat help act _lhsIverbose
-                               {-# LINE 922 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 922 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule52 #-}
    rule52 = \ con_ nt_ var_ ->
      UndefLocal nt_ con_ var_
@@ -956,7 +956,7 @@
                                                  ]
                                    act  = wfill ["The generated program probably contains a type error or has undefined variables."]
                                in ppError (isError _lhsIoptions _me) (getPos var_) mesg pat help act _lhsIverbose
-                               {-# LINE 960 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 960 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule55 #-}
    rule55 = \ con_ nt_ var_ ->
      ChildAsLocal nt_ con_ var_
@@ -999,7 +999,7 @@
                                                  ]
                                    act  = wfill ["The generated program will not run."]
                                in ppError (isError _lhsIoptions _me) (getPos attr_) mesg pat help act _lhsIverbose
-                               {-# LINE 1003 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 1003 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule58 #-}
    rule58 = \ attr_ con_ field_ isOut_ nt_ ->
      UndefAttr nt_ con_ field_ attr_ isOut_
@@ -1039,7 +1039,7 @@
                                    help = hlist (text "The following attributes are all cyclic: " : map text verts_)
                                    act  = wfill ["code cannot be generated until the cycle is removed."]
                                in ppError (isError _lhsIoptions _me) pos mesg pat help act False
-                               {-# LINE 1043 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 1043 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule61 #-}
    rule61 = \ mbCon_ nt_ verts_ ->
      Cyclic nt_ mbCon_ verts_
@@ -1073,7 +1073,7 @@
                                                  ]
                                    act  = wfill ["The nonterminal set", getName name_, "is considered to be empty."]
                                in ppError (isError _lhsIoptions _me) (getPos name_) mesg pat help act _lhsIverbose
-                               {-# LINE 1077 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 1077 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule64 #-}
    rule64 = \ name_ ->
      CyclicSet name_
@@ -1103,7 +1103,7 @@
                                    help = wfill ["not available."]
                                    act  = wfill ["unknown"]
                                in ppError (isError _lhsIoptions _me) pos_ mesg_ pat help act False
-                               {-# LINE 1107 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 1107 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule67 #-}
    rule67 = \ isWarning_ mesg_ pos_ ->
      CustomError isWarning_ pos_ mesg_
@@ -1140,7 +1140,7 @@
                                    act   | o_visit_ = text "An unoptimized version was generated. It might hang when run."
                                          | otherwise = text "The generated program might hang when run."
                                in ppError (isError _lhsIoptions _me) (getPos (attr_)) mesg pat help act _lhsIverbose
-                               {-# LINE 1144 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 1144 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule70 #-}
    rule70 = \ attr_ con_ nt_ o_visit_ path_ ->
      LocalCirc nt_ con_ attr_ o_visit_ path_
@@ -1177,7 +1177,7 @@
                                    act   | o_visit_ = text "An unoptimized version was generated. It might hang when run."
                                          | otherwise = text "The generated program might hang when run."
                                in ppError (isError _lhsIoptions _me) (getPos (attr_)) mesg pat help act _lhsIverbose
-                               {-# LINE 1181 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 1181 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule73 #-}
    rule73 = \ attr_ con_ nt_ o_visit_ path_ ->
      InstCirc nt_ con_ attr_ o_visit_ path_
@@ -1210,7 +1210,7 @@
                                    act   | o_visit_ = text "An unoptimized version was generated. It might hang when run."
                                          | otherwise = text "The generated program might hang when run."
                                in ppError (isError _lhsIoptions _me) noPos mesg pat help act _lhsIverbose
-                               {-# LINE 1214 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 1214 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule76 #-}
    rule76 = \ cyclic_ nt_ o_visit_ ->
      DirectCirc nt_ o_visit_ cyclic_
@@ -1244,7 +1244,7 @@
                                            >-< vlist (map showEdgeLong cyclic_)
                                    act   = text "An unoptimized version was generated. It might hang when run."
                                in ppError (isError _lhsIoptions _me) noPos mesg pat help act _lhsIverbose
-                               {-# LINE 1248 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 1248 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule79 #-}
    rule79 = \ cinter_ cyclic_ nt_ ->
      InducedCirc nt_ cinter_ cyclic_
@@ -1283,7 +1283,7 @@
                                                  ]
                                    act  = wfill ["The type signatures of semantic functions are not generated."]
                                in ppError (isError _lhsIoptions _me) (getPos attr_) mesg pat help act _lhsIverbose
-                               {-# LINE 1287 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 1287 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule82 #-}
    rule82 = \ attr_ con_ nt_ ->
      MissingTypeSig nt_ con_ attr_
@@ -1322,7 +1322,7 @@
                                                  ]
                                    act  = wfill ["It is not possible to proceed without this signature."]
                                in ppError (isError _lhsIoptions _me) (getPos attr_) mesg pat help act _lhsIverbose
-                               {-# LINE 1326 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 1326 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule85 #-}
    rule85 = \ attr_ con_ nt_ ->
      MissingInstSig nt_ con_ attr_
@@ -1362,7 +1362,7 @@
                                                          ]
                                    act  = wfill ["Unpredicatable sharing of unique numbers may occur."]
                                in ppError (isError _lhsIoptions _me) (getPos attr_) mesg pat help act _lhsIverbose
-                               {-# LINE 1366 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 1366 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule88 #-}
    rule88 = \ attr_ con_ nt_ ->
      DupUnique nt_ con_ attr_
@@ -1402,7 +1402,7 @@
                                                  ]
                                    act  = wfill ["It is not possible to proceed without this declaration."]
                                in ppError (isError _lhsIoptions _me) (getPos attr_) mesg pat help act _lhsIverbose
-                               {-# LINE 1406 "src-generated/PrintErrorMessages.hs"#-}
+                               {-# LINE 1406 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule91 #-}
    rule91 = \ attr_ nt_ ->
      MissingUnique nt_ attr_
@@ -1442,7 +1442,7 @@
                                                 ]
                                   act  = wfill ["It is not possible to proceed without this declaration."]
                               in ppError (isError _lhsIoptions _me) (getPos attr_) mesg pat help act _lhsIverbose
-                              {-# LINE 1446 "src-generated/PrintErrorMessages.hs"#-}
+                              {-# LINE 1446 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule94 #-}
    rule94 = \ attr_ nt_ ->
      MissingSyn nt_ attr_
@@ -1473,7 +1473,7 @@
                                   help  = empty
                                   act   = text "It is not possible to proceed without fixing this kind error."
                               in ppError (isError _lhsIoptions _me) (getPos child_) mesg pat help act _lhsIverbose
-                              {-# LINE 1477 "src-generated/PrintErrorMessages.hs"#-}
+                              {-# LINE 1477 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule97 #-}
    rule97 = \ child_ from_ to_ vis_ ->
      IncompatibleVisitKind child_ vis_ from_ to_
@@ -1504,7 +1504,7 @@
                                   help  = empty
                                   act   = text "It is not possible to proceed without fixing this kind error."
                               in ppError (isError _lhsIoptions _me) (getPos rule_) mesg pat help act _lhsIverbose
-                              {-# LINE 1508 "src-generated/PrintErrorMessages.hs"#-}
+                              {-# LINE 1508 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule100 #-}
    rule100 = \ kind_ rule_ ->
      IncompatibleRuleKind rule_ kind_
@@ -1535,7 +1535,7 @@
                                   help  = empty
                                   act   = text "It is not possible to proceed without fixing this kind error."
                               in ppError (isError _lhsIoptions _me) (getPos child_) mesg pat help act _lhsIverbose
-                              {-# LINE 1539 "src-generated/PrintErrorMessages.hs"#-}
+                              {-# LINE 1539 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule103 #-}
    rule103 = \ child_ kind_ ->
      IncompatibleAttachKind child_ kind_
@@ -1600,13 +1600,13 @@
    rule105 = \ ((_lhsIoptions) :: Options) ->
                        {-# LINE 67 "src-ag/PrintErrorMessages.ag" #-}
                        verbose _lhsIoptions
-                       {-# LINE 1604 "src-generated/PrintErrorMessages.hs"#-}
+                       {-# LINE 1604 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule106 #-}
    {-# LINE 68 "src-ag/PrintErrorMessages.ag" #-}
    rule106 = \ ((_hdIpp) :: PP_Doc) ->
                       {-# LINE 68 "src-ag/PrintErrorMessages.ag" #-}
                       disp _hdIpp 5000 ""
-                      {-# LINE 1610 "src-generated/PrintErrorMessages.hs"#-}
+                      {-# LINE 1610 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule107 #-}
    {-# LINE 70 "src-ag/PrintErrorMessages.ag" #-}
    rule107 = \ ((_hdIpp) :: PP_Doc) ((_lhsIdups) :: [String]) _str ((_tlIpp) :: PP_Doc) ->
@@ -1614,13 +1614,13 @@
                      if _str     `elem` _lhsIdups
                      then _tlIpp
                      else _hdIpp >-< _tlIpp
-                     {-# LINE 1618 "src-generated/PrintErrorMessages.hs"#-}
+                     {-# LINE 1618 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule108 #-}
    {-# LINE 73 "src-ag/PrintErrorMessages.ag" #-}
    rule108 = \ ((_lhsIdups) :: [String]) _str ->
                       {-# LINE 73 "src-ag/PrintErrorMessages.ag" #-}
                       _str     : _lhsIdups
-                      {-# LINE 1624 "src-generated/PrintErrorMessages.hs"#-}
+                      {-# LINE 1624 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule109 #-}
    rule109 = \ ((_lhsIoptions) :: Options) ->
      _lhsIoptions
@@ -1648,10 +1648,10 @@
    rule112 = \ ((_lhsIoptions) :: Options) ->
                        {-# LINE 67 "src-ag/PrintErrorMessages.ag" #-}
                        verbose _lhsIoptions
-                       {-# LINE 1652 "src-generated/PrintErrorMessages.hs"#-}
+                       {-# LINE 1652 "src-generated/PrintErrorMessages.hs" #-}
    {-# INLINE rule113 #-}
    {-# LINE 74 "src-ag/PrintErrorMessages.ag" #-}
    rule113 = \  (_ :: ()) ->
                      {-# LINE 74 "src-ag/PrintErrorMessages.ag" #-}
                      text ""
-                     {-# LINE 1658 "src-generated/PrintErrorMessages.hs"#-}
+                     {-# LINE 1658 "src-generated/PrintErrorMessages.hs" #-}
diff --git a/src-generated/VisagePatterns.hs b/src-generated/VisagePatterns.hs
--- a/src-generated/VisagePatterns.hs
+++ b/src-generated/VisagePatterns.hs
@@ -1,6 +1,6 @@
 
 
--- UUAGC 0.9.53 (src-ag/VisagePatterns.ag)
+-- UUAGC 0.9.56 (src-ag/VisagePatterns.ag)
 module VisagePatterns where
 {-# LINE 2 "src-ag/VisagePatterns.ag" #-}
 
diff --git a/src-generated/VisageSyntax.hs b/src-generated/VisageSyntax.hs
--- a/src-generated/VisageSyntax.hs
+++ b/src-generated/VisageSyntax.hs
@@ -1,6 +1,6 @@
 
 
--- UUAGC 0.9.53 (src-ag/VisageSyntax.ag)
+-- UUAGC 0.9.56 (src-ag/VisageSyntax.ag)
 module VisageSyntax where
 {-# LINE 2 "src-ag/VisageSyntax.ag" #-}
 
diff --git a/uuagc.cabal b/uuagc.cabal
--- a/uuagc.cabal
+++ b/uuagc.cabal
@@ -1,7 +1,7 @@
 cabal-version: >= 1.10
 build-type: Custom
 name: uuagc
-version: 0.9.55
+version: 0.9.56
 license: BSD3
 license-file: LICENSE
 maintainer: Jeroen Bransen
@@ -17,6 +17,7 @@
 extra-source-files: README
 extra-source-files: uuagc_options
 extra-source-files: src-ag/*.ag
+extra-source-files: src-ag/*.lag
 extra-source-files: src-ag/LOAG/*.ag
 
 -- This flag will be set by Setup.hs, use
