anchor.diff:  /// ## Sample
   ///
   ///     ["file1.fs"; "file2.fs"]
  -///     |> fsc [Out "" 
  -///             Target Exe
  -///             Platform AnyCpu
  -///             References []
  -///             Debug false 
  -///        ]
  -let fsc (fscParams : FscParam list) (inputFiles : string list) : int = 
  +///     |> fsc (fun parameters ->
  +///              { parameters with Output = ...
  +///                                FscTarget = ...
  +///                                ... })
  +[<Obsolete "Use fsc in FscHelper.Alt instead">]
  +let fsc (setParams : FscParams -> FscParams) (inputFiles : string list) : int = 
       let inputFiles = inputFiles |> Seq.toList
       let taskDesc = inputFiles |> separated ", "
  -    let fscParams = if fscParams = [] then FscParam.Defaults else fscParams
  -    let argList = fscParams |> List.map string
  +    let fscParams = setParams FscParams.Default
  +
  +    let output = if fscParams.Output <> "" then [ "-o"; fscParams.Output ] else []
  +    let target =
  +        match fscParams.FscTarget with
  +        | Exe -> [ "--target:exe" ]
  +        | Winexe -> [ "--target:winexe" ]
  +        | Library -> [ "-a" ]
  +        | Module -> [ "--target:module" ]
  +    let platform =
  +        match fscParams.Platform with
  +        | X86 -> [ "--platform:x86" ]
  +        | Itanium -> [ "--platform:itanium" ]
  +        | X64 -> [ "--platform:x64" ]
  +        | AnyCpu32BitPreferred -> [ "--platform:anycpu32bitpreferred" ]
  +        | AnyCpu -> [ "--platform:anycpu" ]
  +    let references =
  +        let refs =
  +            fscParams.References
  +            |> List.map (fun r -> sprintf "--reference:%s" r)
  +        let isNonDefaultFramework =
  +            fscParams.References
  +            |> List.exists (fun r->
  +                r.IndexOf("FSharp.Core.dll", System.StringComparison.InvariantCultureIgnoreCase) >= 0
  +                || r.IndexOf("mscorlib.dll", System.StringComparison.InvariantCultureIgnoreCase) >= 0)
  +        if isNonDefaultFramework then "--noframework"::refs else refs
  +    let debug = if fscParams.Debug then [ "-g" ] else []
  +    let argList =
  +        output @ target @ platform @ references @ debug @ fscParams.OtherParams
       traceStartTask "Fsc " taskDesc
       let res = fscList inputFiles argList
       traceEndTask "Fsc " taskDesc
  
positive.code: /// ## Sample
  ///
  ///     ["file1.fs"; "file2.fs"]
  ///     |> Fsc [Out "" 
  ///             Target Exe
  ///             Platform AnyCpu
  ///             References []
  ///             Debug false 
  ///        ]
  let Fsc (fscParams : FscParam list) (inputFiles : string list) : unit = 
      let res = fsc fscParams inputFiles
      if res <> 0 then raise <| BuildException("Fsc: compile failed with exit code", [ string res ])
  
negative.code:     trace <| sprintf "FSC with args:%A" optsArr
      // Always prepend "fsc.exe" since fsc compiler skips the first argument
      let optsArr = Array.append [|"fsc.exe"|] optsArr
      let errors, exitCode = scs.Compile(optsArr)
      // Better compile reporting thanks to:
      // https://github.com/jbtule/ComposableExtensions/blob/5b961b30668bb7f4d17238770869b5a884bc591f/tools/CompilerHelper.fsx#L233
      for e in errors do
          let errMsg = e.ToString()
          match e.Severity with
          | Microsoft.FSharp.Compiler.Warning -> traceImportant errMsg
          | Microsoft.FSharp.Compiler.Error -> traceError errMsg
      exitCode
  
  /// Compiles the given F# source files with the specified parameters.
  