anchor.diff:          let args = Seq.exactlyOne attr.ConstructorArguments
           args.Value :?> string
   
  -    let includes (moduleType: Type) =
  -        let attrs =
  -            moduleType.CustomAttributes
  -            |> Seq.filter (fun x -> x.AttributeType = typeof<IncludeAttribute>)
  -        attrs
  -        |> Seq.map (fun x -> Seq.exactlyOne x.ConstructorArguments)
  -        |> Seq.map (fun x -> "#include " + (x.Value :?> string))
  -        |> Seq.reduce (fun x y -> x + "\n" + y)
  -
  -
       let checkProcessError (p: Process) =
           if p.ExitCode <> 0 then failwith (p.StandardError.ReadToEnd ())
   
  -    let gccCompileC flags cFile oFile code : IO<string> = io {
  -        File.WriteAllText (cFile, code)
  -
  -        let args = sprintf "-Wall -std=c99 -arch i386 %s -c %s -o %s" flags cFile oFile
  -        let pinfo = ProcessStartInfo ("gcc", args)
  +    let startClang args = io {
  +        let pinfo = ProcessStartInfo ("clang", args)
   
           pinfo.UseShellExecute <- false
           pinfo.RedirectStandardError <- true
  
positive.code: #endif
  "
  
  let rec findCall call = function
      | SpecificCall <@ C @> (_, _, exprList) -> (<@@ C @@>, exprList.[0])
      | SpecificCall <@ CExtern @> (_, _, exprList) -> (<@@ CExtern @@>, exprList.[0])
  
negative.code:         let p = Process.Start (pinfo)
          p.WaitForExit ()
  
          checkProcessError p }
  
      let startAr args = io {
          let pinfo = ProcessStartInfo ("ar", args)
  
          pinfo.UseShellExecute <- false
          pinfo.RedirectStandardError <- true
  
          let p = Process.Start (pinfo)
          p.WaitForExit ()
  
          checkProcessError p }
  
      let compileC flags cFile oFile code : IO<string> = io {
          File.WriteAllText (cFile, code)
  
          let args = sprintf "-Wall -std=c99 -arch i386 %s -c %s -o %s" flags cFile oFile
          do! startClang args
  
          File.Delete (cFile)
          return oFile }
  