anchor.diff:  evaluation a declaration:
   *)
   
  -evalInteraction "let xxx = 1 + 1"
  +fsiSession.EvalInteraction "let xxx = 1 + 1"
   
   (**
   
  
positive.code: | Choice1Of2 () -> printfn "checked and executed ok"
  | Choice2Of2 exn -> printfn "execution exception: %s" exn.Message
  
  (**
  Gives:
  
  
negative.code: 
      Warning The type 'float' does not match the type 'char' at 1,19
      Warning The type 'float' does not match the type 'char' at 1,17
  
  For expressions:
  *)
  
  
  let evalExpressionTyped2<'T> text =
     let res, warnings = fsiSession.EvalExpressionNonThrowing(text)
     for w in warnings do 
         printfn "Warning %s at %d,%d" w.Message w.StartLineAlternate w.StartColumn 
     match res with 
     | Choice1Of2 (Some value) -> value.ReflectionValue |> unbox<'T>
     | Choice1Of2 None -> failwith "null or no result"
     | Choice2Of2 (exn:exn) -> failwith (sprintf "exception %s" exn.Message)
  
  evalExpressionTyped2<int> "42+1"  // gives '43'
  
  
  (**
  Executing in parallel
  ------------------
  
  By default the code passed to ``EvalExpression`` is executed immediately. To execute in parallel, submit a computation that starts a task:
  *)
  
  open System.Threading.Tasks
  
  let sampleLongRunningExpr = 
      """
  async { 
      // The code of what you want to run
      do System.Threading.Thread.Sleep 5000
      return 10 
  }
    |> Async.StartAsTask"""
  
  let task1 = evalExpressionTyped<Task<int>>(sampleLongRunningExpr)  
  let task2 = evalExpressionTyped<Task<int>>(sampleLongRunningExpr)  
  
  (**
  Both computations have now started.  You can now fetch the results:
  *)
  
  
  task1.Result // gives the result after completion (up to 5 seconds)
  task2.Result // gives the result after completion (up to 5 seconds)
  
  (**
  Type checking in the evaluation context
  