anchor.diff:  type CGen = {
       Header : string
       Source : string }
  +
  +type CGenContext =
  +    | Header = 0
  +    | Source = 1
   
   let generateHeaderCode (name : string) header =
       let name = name.ToUpper ()
  
positive.code:     |> List.map generateCDeclFunctionPointerImpl
      |> List.reduce (fun x y -> x + "\n" + y)
  
  let generateHeader (env: CEnv) includes =
      let structs = generateCDeclStructs env.DeclStructs
      let funcPtrs = generateCDeclFunctionPointers env.DeclFunctionPointers
  
      sprintf "%s\n%s\n%s" includes structs funcPtrs
      |> generateMainHeaderCode env.Name
  
  let generateSource (env: CEnv) =
      (generateHeaderIncludeCode env.Name) + 
      generateCDeclFunctions env.DeclFunctions +
      generateCDeclFunctionPointerImpls env.DeclFunctionPointers
  
  let generate env includes =
  
negative.code: let generateCDeclStruct {CDeclStruct.Name=name; Fields=fields} =
      generateCDeclStructCode (generateCFields fields) name
  
  let generateCDecl context = function
      | Function x when context = CGenContext.Source ->
          generateCDeclFunction x
      | FunctionPrototype x when context = CGenContext.Header ->
          generateCDeclFunctionPrototype x
      | FunctionPointer x when context = CGenContext.Header ->
          generateCDeclFunctionPointer x
      | Struct x when context = CGenContext.Header ->
          generateCDeclStruct x
      | _ -> ""
  
  let generateCDecls context = function
      | [] -> ""
      | decls ->
  
      decls
      |> List.map (generateCDecl context)
      |> List.reduce (fun x y -> x + "\n" + y)
  
  let generateCDeclFunctionPointerImpl {CDeclFunctionPointer.Name=name} =
      genereateCDeclFunctionPointerImplCode name
  
  let generateCDeclFunctionPointerImpls = function
      | [] -> ""
  