anchor.diff:  
     /// Creates phony action (check if I can unify the operator name)
     let (=>) = Impl.makePhonyRule
  -
  -  // Helper method to obtain script options within rule/task implementation
  -  let getCtxOptions() = action {
  -    let! (ctx: ExecContext) = getCtx()
  -    return ctx.Options
  -  }
positive.code:   /// creates xake build script
    let xake options = new RulesBuilder(options)
  
    /// key function implementation
    /// Executes and awaits specified artifacts
    let needFileset fileset =
        action {
          let! ctx = getCtx()
          do! fileset |> (toFileList ctx.Options.ProjectRoot >> List.map (fun f -> new Artifact (f.FullName) |> FileTarget)) |> Impl.needTarget
        }
  
    /// Executes and awaits specified artifacts
  
negative.code:       |> function
          | Some action ->
            async {
              let! waitTask = run action |> ctx.TaskPool.PostAndAsyncReply
              do! waitTask
              return Dependency.ArtifactDep target
            }
          | None ->
            // should always fail for phony
            let (FileTarget file) = target
            match file.Exists with
            | true -> async {return Dependency.File (file,file.LastWriteTime)}
            | false -> raiseError ctx (sprintf "Neither rule nor file is found for '%s'" (getFullname target)) ""
  
      /// Executes several artifacts in parallel
      let private exec ctx = Seq.ofList >> Seq.map (execOne ctx) >> Async.Parallel
  