anchor.diff:      let variables = Dictionary<string, expression>()
       let operators = Dictionary<string, operator>()
   
  +    member this.Variables = variables
  +    member this.Operators = operators
  +
       member this.Evaluate =
           function
           | Nil -> Success(Nil)
  
positive.code:             | (true, v) -> Success(v)
              | _ -> Failure(sprintf "undefined symbol: `%s`" s)
  
          | List(Symbol(op) :: args) ->
              match operators.TryGetValue(op) with
              | (true, op) -> op.Invoke(args)
              | _ -> Failure(sprintf "undefined operator: `%s`" op)
  
  
  [<EntryPoint>]
  let main _ =
      printfn "%A" <| Parser.FromString "hoge"
      printfn "%A" <| Parser.FromString "10"
      printfn "%A" <| Parser.FromString "-10"
      printfn "%A" <| Parser.FromString "false"
      printfn "%A" <| Parser.FromString "(a b c + - * / _ !)"
      printfn "%A" <| Parser.FromString "(abc/def a10 (2 3 hoge))"
      printfn "%A" <| Parser.FromString "( 10 fa1   \n 10  )"
  
      printfn "%A" <| Parser.FromString "(10a)"
      printfn "%A" <| Parser.FromString "a b c"
  
      let eng = engine()
      Parser.FromString "(+ 1 2)" |> Result.bind eng.Evaluate |> printfn "%A"
      0
  
negative.code:         | Failure e -> Failure e
  
  
  type expression = Nil
                  | Boolean of bool
                  | Number of int
                  | Symbol of string
                  | List of expression list
  