anchor.diff:  ﻿module Parse
   open FParsec
   open Ast
  +
  +let fatalizeAnyError (p : Parser<'a, 'u>) : Parser<'a, 'u> =
  +    fun stream ->
  +        let reply = p stream
  +        if reply.Status = Ok then
  +            reply
  +        else
  +            Reply(FatalError, reply.Error)
   
   let singleLineComment = skipString "//" >>. restOfLine true >>% ()
   let multiLineComment = skipString "(*" >>. skipCharsTillString "*)" true System.Int32.MaxValue
  
positive.code: let inlineCpp =
      let normalCharSnippet = manySatisfy (fun c -> c <> '\\' && c <> '#')
      let escapedChar = pstring "\\" >>. (anyOf "\\#" |>> string)
      between (pstring "#") (pstring "#") (stringsSepBy normalCharSnippet escapedChar) |> pos
  
  // expr
  do
      let punit = skipString "()" >>% () |> pos |>> UnitExp
      let parens = betweenChar '(' (expr |>> unwrap) ')'
      let ptrue = skipString "true" |> pos |>> TrueExp
      let pfalse = skipString "false" |> pos |>> FalseExp
      let pint = pos pint64 |>> IntExp .>> notFollowedByString "."
      let pdouble = pos pfloat |>> DoubleExp
      let pfloat = pos (pfloat .>> skipChar 'f') |>> FloatExp
      let pint8 = pos (pint64 .>> skipString "i8") |>> Int8Exp
      let pint16 = pos (pint64 .>> skipString "i16") |>> Int16Exp
      let pint32 = pos (pint64 .>> skipString "i32") |>> Int32Exp
      let pint64' = pos (pint64 .>> skipString "i64") |>> Int64Exp
      let puint8 = pos (pint64 .>> skipString "u8") |>> UInt8Exp
      let puint16 = pos (pint64 .>> skipString "u16") |>> UInt16Exp
      let puint32 = pos (pint64 .>> skipString "u32") |>> UInt32Exp
      let puint64 = pos (pint64 .>> skipString "u64") |>> UInt64Exp
      let charlist = pos (stringLiteral '\'' true) |>> CharListLiteral
      let str = pos (stringLiteral '"' true) |>> StringLiteral
      let seq = betweenChar '(' (separatedList (attempt expr) ';' |> pos) ')' |>> SequenceExp
      let quit = skipString "quit" >>. ws >>. opt (skipChar '<' >>. ws >>. tyExpr .>> ws .>> skipChar '>') .>> ws .>> skipChar '(' .>> ws .>> skipChar ')' |>> QuitExp
      let applyTemplateToFunc =
          pipe2
              (pos ((attempt moduleQualifier |>> Choice2Of2) <|> (id |>> Choice1Of2)) .>> ws)
  
negative.code:             (fun funExpr temp -> TemplateApplyExp {func = funExpr; templateArgs = temp})
      let pIf =
          pipe3
              (skipString "if" >>. ws >>. fatalizeAnyError (expr .>> ws))
              (fatalizeAnyError (skipString "then" >>. ws >>. expr .>> ws))
              (fatalizeAnyError elifList)
              (fun condition trueBranch falseBranch ->
                  IfElseExp {
                      condition = condition;
  