anchor.diff:    
   let refresh (fi : FileInfo) = 
     traceImportant <| sprintf "%s was changed." fi.FullName
  -  generate (Some fi)
  +  try
  +    generate (Some fi)
  +    true
  +  with e ->
  +    traceError "Reload failed: "
  +    traceError e.Message
  +    traceError e.StackTrace
  +    false
   
   let refreshEvent = new Event<_>()
   
  
positive.code: type MyFsiEvaluator() =
    let inner = FsiEvaluator()
    do inner.EvaluationFailed.Add(fun err -> 
      failwithf "Evaluating: %A\nError: %A" err.Text err.Exception)
    let innerInt = inner :> IFsiEvaluator
    interface IFsiEvaluator with
      member x.Format(result, kind) = 
  
negative.code: 
  
  let handleWatcherEvents (events:FileChange seq) =
      let succeed = 
        events
        |> Seq.map (fun e -> fileInfo e.FullPath)
        |> Seq.filter (fun fi -> 
          not (fi.Attributes.HasFlag FileAttributes.Hidden) && 
          not (fi.Attributes.HasFlag FileAttributes.Directory))
        |> Seq.forall refresh
      
      if succeed then
        directExec (fun si ->
                si.FileName <- "node"
                si.Arguments <- sprintf "%s %s %s" gitbook "build" outDir
        ) |> ignore
  
        refreshEvent.Trigger()
  
  Target "Generate" (fun _ ->
    CleanDir outDir
  