anchor.diff:              (fun funExpr temp -> TemplateApplyExp {func = funExpr; templateArgs = temp})
       let pIf =
           pipe3
  -            (skipString "if" >>. ws >>. expr .>> ws)
  -            (skipString "then" >>. ws >>. expr .>> ws)
  -            elifList
  +            (skipString "if" >>. ws >>. fatalizeAnyError (expr .>> ws))
  +            (fatalizeAnyError (skipString "then" >>. ws >>. expr .>> ws))
  +            (fatalizeAnyError elifList)
               (fun condition trueBranch falseBranch ->
                   IfElseExp {
                       condition = condition;
  
positive.code: ﻿module Parse
  open FParsec
  open Ast
  
  let singleLineComment = skipString "//" >>. restOfLine true >>% ()
  let multiLineComment = skipString "(*" >>. skipCharsTillString "*)" true System.Int32.MaxValue
  
negative.code:                 | ArrayIndex index -> ArrayAccessExp {array=term; index=index}
                  | TypeConstraintType typ -> TypeConstraint {exp=term; typ=typ}
                  | FieldAccessName fieldName -> RecordAccessExp {record=term; fieldName=fieldName}
                  | UnsafeTypeCastType typ -> UnsafeTypeCast {exp=term; typ=typ})
  
  // templateApply
  do
  