anchor.diff:              {tyVars = tyVars; capVars = capVars})
   
   // capExpr
  -let capExpr = attempt capOpp.ExpressionParser
  +let capExpr = capOpp.ExpressionParser
   
   do
       let capVar = pos id |>> CapacityNameExpr |> pos
  
positive.code: // tyExpr
  do
      let varTy =
          skipChar '\'' >>. id |> pos |>> VarTy
      let name =
          pos id |>>
          (fun (p, n) ->
  
negative.code: 
  let moduleName = skipString "module" >>. ws >>. pos id .>> ws |>> ModuleNameDec
  
  let typeDec =
      let valueConstructor = pos id .>> ws .>>. (skipString "of" >>. ws >>. tyExpr |> opt .>> ws)
      pipe3
          (skipString "type" >>. ws >>. pos id .>> ws)
          (templateDec |> pos |> opt .>> ws .>> skipChar '=' .>> ws)
          ((pipe2
              ((skipString "packed" |> pos |> opt) .>> ws .>> skipChar '{' .>> ws)
              (fatalizeAnyError (separatedList ((pos id .>> ws .>> skipChar ':' .>> ws) .>>. tyExpr) ';' |> pos .>> ws .>> skipChar '}' .>> ws))
              (fun packed fields -> Choice1Of2 (packed, fields))) <|>
            (((separatedList valueConstructor '|' |> pos) |>> Choice2Of2)))
          (fun name template choice -> 
              match choice with
              | Choice1Of2 (packed, fields) ->
                  RecordDec {name=name; template=template; packed=packed; fields=fields}
              | Choice2Of2 valCons ->
                  UnionDec {name=name; template=template; valCons=valCons})
  
  
  let recordDec =
      pipe4
          (skipString "type" >>. ws >>. pos id .>> ws)
          (templateDec |> pos |> opt .>> ws .>> skipChar '=' .>> ws)
          ((skipString "packed" |> pos |> opt) .>> ws .>> skipChar '{' .>> ws)
          (fatalizeAnyError (separatedList ((pos id .>> ws .>> skipChar ':' .>> ws) .>>. tyExpr) ';' |> pos .>> ws .>> skipChar '}' .>> ws))
          (fun name template packed fields ->
              RecordDec {name=name; template=template; packed=packed; fields=fields})
  
  