anchor.diff:  
   
   let handleWatcherEvents (events:FileChange seq) =
  -    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.iter refresh
  +    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
       
  -    directExec (fun si ->
  -            si.FileName <- "node"
  -            si.Arguments <- sprintf "%s %s %s" gitbook "build" outDir
  -    ) |> ignore
  -
  -    refreshEvent.Trigger()   
  -    
  -  
  +    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
  
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 refresh (fi : FileInfo) = 
    traceImportant <| sprintf "%s was changed." fi.FullName
    try
      generate (Some fi)
      true
    with e ->
      traceError "Reload failed: "
      traceError e.Message
      traceError e.StackTrace
      false
  
  let refreshEvent = new Event<_>()
  
  