anchor.diff:  
   module Orelang =
     type Expr = Nil
  +            | Boolean of bool
               | Number of decimal
               | Symbol of string
               | Function of string * Expr list
  +    with
  +      member this.ToSymbol() =
  +        match this with
  +        | Symbol s -> Some s
  +        | _ -> None
   
     type ErrorKind = ParseError of string
   
  
positive.code:       env.Remove(k) |> ignore
        env.Add(k, v)
  
      member this.Evaluate (expr: Expr) : Expr option =
        Some expr
  
  
  open System.IO
  
  [<EntryPoint>]
  let main _ =
    let repo_root = Directory.GetParent(__SOURCE_DIRECTORY__).ToString()
    
    let test_string s =
      match Orelang.ParseFromString s with
      | Result.OK ast -> printfn "string:\n%A\n" ast
      | Result.Error msg -> printfn "failed to parse: %A\n" msg
  
    let test_file path =
      match Orelang.ParseFromFile path with
      | Result.OK ast -> printfn "%s:\n%A\n" <| System.IO.Path.GetFileName path <| ast
      | Result.Error msg -> printfn "failed to parse: %A\n" msg
  
    test_string   "nil"
    test_string   "(+ 1 2 (* 3 4))"
    test_file  <| repo_root + "/examples/example_sum.ore"
  
    match Orelang.ParseFromFile <| repo_root + "/examples/example_sum.ore" with
    | Result.Error msg ->
      printfn "failed to parse: %A\n" msg
    | Result.OK expr ->
      let engine = Orelang.Engine()
      let result = engine.Evaluate expr
      printfn "result: %A" result
  
    // failure case
    // test_string   "(+ 1 2 (* 3 4)))"
  
negative.code:     ParseFromString <| System.IO.File.ReadAllText path
  
    type Engine() =
      let env = new Dictionary<string, Expr>()
  
      member private this.getValue k =
        match env.TryGetValue(k) with
  