anchor.diff:        async {
           let! nextLine = (scanner: TextReader).ReadLineAsync() |> Async.AwaitTask
           if String.IsNullOrEmpty(nextLine) 
  -          then return seq lines
  +          then return lines
             else
               do printf "-\t"
  -            return! readLinesIntoSeqAsync (lines @ [ nextLine ])
  +            return! readLinesIntoSeqAsync (seq {
  +              yield! lines
  +              yield nextLine 
  +            })
         } 
           
  -    seq { 
  -      yield! readLinesIntoSeqAsync [] 
  -        |> Async.RunSynchronously
  -        |> Seq.rev 
  -    } |> String.concat "\n"
  +    Seq.empty
  +    |> readLinesIntoSeqAsync
  +    |> Async.RunSynchronously
  +    |> Seq.rev 
  +    |> String.concat "\n"
   
     open FParsec
   
  
positive.code: 
    let parseExtern = skipString Extern .>> parseWhiteSpace
  
  module Parser =
    open FParsec
    open AST
    open Lexer
  
negative.code: let builder = LLVM.CreateBuilderInContext(context)
  let engine = ref (LLVMExecutionEngineRef(IntPtr.Zero))
  
  module internal Codegen =
  
    open AST
  
    let namedValues = dict []
  
    let rec private codegenExpr =
      function
      | Number n -> LLVM.ConstReal(LLVM.DoubleType(), n)
      | Variable name ->
        match Dictionary.tryFind name namedValues with
        | Some llvmValue -> llvmValue
        | _ -> failwithf "unknown variable %s" name
      | BinaryOperation (op, lhs, rhs) -> 
        let lhs = codegenExpr lhs
        let rhs = codegenExpr rhs
        match op with
        | Plus -> LLVM.BuildAdd(builder, lhs, rhs, "addtmp")
        | Minus -> LLVM.BuildSub(builder, lhs, rhs, "subtmp")
  