anchor.diff:  
               let! bufferDecls = uniformBuffers |> Map.toSeq |> Seq.mapC (fun (buffer,elements) ->
                   compile {
  +                    
                       let elements = System.Collections.Generic.HashSet(elements)
   
                       let groups = elements |> Seq.groupBy (fun (t,_) -> match t with | SamplerType(_) -> true | _ -> false)
  
positive.code:                                                     return r + ";"
                                                  })
  
                                              let name = match buffer.Parent with
                                                          | None -> "Global"
                                                          | Some _ -> buffer.Name
  
                                              let elements = String.concat "\r\n" elements
  
                                              return sprintf "uniform %s\r\n{\r\n%s\r\n};\r\n" name (String.indent 1 elements) |> Some
                                          | None -> return None
                                    }
  
  
negative.code: 
              let! inputs = inputs |> Seq.mapCi (fun i (KeyValue(_,n)) -> 
                  compile {
                      
                      let modifier =
                          if glslVersion > version120 then
                              sprintf "layout(location = %d) in" i
                          else
                              if s.shaderType = ShaderType.Vertex then 
                                  "attribute" 
                              else 
                                  "varying"
  
                      if n.Type.IsArray then
                          let t = n.Type.GetElementType()
                          let! r = compileVariableDeclaration t n.Name
                          return sprintf "%s %s[];" modifier r
  
                      else
                          let! r = compileVariableDeclaration n.Type n.Name
                          return sprintf "%s %s;" modifier r
  
                  })
  
              let! outputs = outputs |> Seq.mapCi (fun i (KeyValue(_,(_,n))) -> 
                  compile {
                      let modifier =
                          if glslVersion > version120 then
                              sprintf "layout(location = %d) out" i
                          else
                              "varying"
  
                      if s.shaderType = ShaderType.TessControl then
                          let t = n.Type
                          let! r = compileVariableDeclaration t n.Name
                          return sprintf "%s %s[];" modifier r
                      else
                          let! r = compileVariableDeclaration n.Type n.Name
                          return sprintf "%s %s;" modifier r
                      })
  
  
  