content: {-+
  Except for one equation, this module provides an implementation of the
  function L from section 9.3 of the revised Haskell 98 Report.
  The missing equation is the one that requires interaction with the parser.
  This means that things like
  
       let x=1
       in x+x
  
  will be correctly translated to
  
       let {x=1}
       in x+x
  
  but things like
  
       let x=1 in x+x
  
  that should be parsed as
  
       let { x=1 } in x+x
  
  will *not* be treated correctly in this implementation.
  -}
  
  module L(l) where
  import HsTokens(Token(..))
  default(Int)
  
  -- The equations for cases when <n> is the first token:
  l ts0@((Indent n,(p,_)):ts) ms0@(m:ms) | m==n = semi p:l ts ms0
                                         | n<m  = vrbrace p:l ts0 ms
  l ((Indent _,_):ts) ms = l ts ms
  -- The equations for cases when {n} is the first token:
  l ((Open n,(p,_)):ts) (m:ms) | n>m = vlbrace p:l ts (n:m:ms)
  l ((Open n,(p,_)):ts) []     | n>0 = vlbrace p:l ts [n]
  l ((Open n,(p,_)):ts) ms       = vlbrace p:vrbrace p:l ((Indent n,(p,"")):ts) ms
  -- Equations for explicit braces:
  l (t1@(Special,(_,"}")):ts) (0:ms) = t1:l ts ms
  l (t1@(Special,(p,"}")):ts) ms     = layout_error p "unexpected }"++ts -- hmm
  l (t1@(Special,(p,"{")):ts) ms     = t1:l ts (0:ms)
  -- The equation for ordinary tokens:
  l (t:ts) ms = t:l ts ms
  -- Equations for end of file:
  l [] [] = [{-eoftoken-}]
  l [] (m:ms) = if m/=0
  	      then vrbrace eof:l [] ms
  	      else layout_error eof "missing } at eof"
  
  -- There are the tokens inserted by the layout processor:
  vlbrace p = (Layout,(p,"{"))
  vrbrace p = (Layout,(p,"}"))
  semi p = (Special,(p,";"))
  
  --eoftoken = (GotEOF,(eof,""))
  eof = (-1,-1) -- hmm
  
  layout_error p msg = [(ErrorToken,(p,"{-"++msg++"-}"))] -- hmm
  