anchor.diff:          let semiColon = pchar ';' >>. preturn (Token SemiColon)
           let lParens = pchar '(' >>. preturn (Token LParens)
           let rParens = pchar ')' >>. preturn (Token RParens)
  +        let lBracket = pchar '[' >>. preturn (Token LBracket)
  +        let rBracket = pchar ']' >>. preturn (Token RBRacket)
           
           module Keyword =
               let private keywordP str keyword = pstring str >>. preturn (keyword |> Keyword)
  
positive.code:         | Keyword of Keyword
          | LParens
          | RParens
      and TypeQualifier = SingleTypeQualifier list
      and SingleTypeQualifier =
          | StorageQualifier of Token //TODO: Can be narrowed to actual storage qualifiers
  
negative.code: 
          let typeQualifierParser: Parser<TypeQualifier, _> = many1 singleTypeQualifier
      
      module TypeSpecifierParser =
          let typeSpecifierNonArray =
              TokensParsers.Keyword._void
              <|> TokensParsers.Keyword._float
              <|> TokensParsers.Keyword._double
              <|> TokensParsers.Keyword._int
              <|> TokensParsers.Keyword._uint
              <|> TokensParsers.Keyword._bool
              <|> TokensParsers.Keyword._vec2
              <|> TokensParsers.Keyword._vec3
              <|> TokensParsers.Keyword._vec4
              <|> TokensParsers.Keyword._dvec2
              <|> TokensParsers.Keyword._dvec3
              <|> TokensParsers.Keyword._dvec4
              <|> TokensParsers.Keyword._bvec2
              <|> TokensParsers.Keyword._bvec3
              <|> TokensParsers.Keyword._bvec4
              <|> TokensParsers.Keyword._ivec2
              <|> TokensParsers.Keyword._ivec3
              <|> TokensParsers.Keyword._ivec4
              <|> TokensParsers.Keyword._uvec2
              <|> TokensParsers.Keyword._uvec3
              <|> TokensParsers.Keyword._uvec4
              <|> TokensParsers.Keyword._mat2
              <|> TokensParsers.Keyword._mat3
              <|> TokensParsers.Keyword._mat4
              <|> TokensParsers.Keyword._mat2x2
              <|> TokensParsers.Keyword._mat2x3
              <|> TokensParsers.Keyword._mat2x4
              <|> TokensParsers.Keyword._mat3x2
              <|> TokensParsers.Keyword._mat3x3
              <|> TokensParsers.Keyword._mat3x4
              <|> TokensParsers.Keyword._mat4x2
              <|> TokensParsers.Keyword._mat4x3
              <|> TokensParsers.Keyword._mat4x4
              <|> TokensParsers.Keyword._dmat2
              <|> TokensParsers.Keyword._dmat3
              <|> TokensParsers.Keyword._dmat4
              <|> TokensParsers.Keyword._dmat2x2
              <|> TokensParsers.Keyword._dmat2x3
              <|> TokensParsers.Keyword._dmat2x4
              <|> TokensParsers.Keyword._dmat3x2
              <|> TokensParsers.Keyword._dmat3x3
              <|> TokensParsers.Keyword._dmat3x4
              <|> TokensParsers.Keyword._dmat4x2
              <|> TokensParsers.Keyword._dmat4x3
              <|> TokensParsers.Keyword._dmat4x4
              <|> TokensParsers.Keyword._atomic_uint
              <|> TokensParsers.Keyword._sampler2D
              <|> TokensParsers.Keyword._sampler3D
              <|> TokensParsers.Keyword._samplerCube
              <|> TokensParsers.Keyword._sampler2DShadow
              <|> TokensParsers.Keyword._samplerCubeShadow
              <|> TokensParsers.Keyword._sampler2DArray
              <|> TokensParsers.Keyword._sampler2DArrayShadow
              <|> TokensParsers.Keyword._samplerCubeArray
              <|> TokensParsers.Keyword._samplerCubeArrayShadow
              <|> TokensParsers.Keyword._isampler2D
              <|> TokensParsers.Keyword._isampler3D
              <|> TokensParsers.Keyword._isamplerCube
              <|> TokensParsers.Keyword._isampler2DArray
              <|> TokensParsers.Keyword._isamplerCubeArray
              <|> TokensParsers.Keyword._usampler2D
              <|> TokensParsers.Keyword._usampler3D
              <|> TokensParsers.Keyword._usamplerCube
              <|> TokensParsers.Keyword._usampler2DArray
              <|> TokensParsers.Keyword._usamplerCubeArray
              <|> TokensParsers.Keyword._sampler1D
              <|> TokensParsers.Keyword._sampler1DShadow
              <|> TokensParsers.Keyword._sampler1DArray
              <|> TokensParsers.Keyword._sampler1DArrayShadow
              <|> TokensParsers.Keyword._isampler1D
              <|> TokensParsers.Keyword._isampler1DArray
              <|> TokensParsers.Keyword._usampler1D
              <|> TokensParsers.Keyword._usampler1DArray
              <|> TokensParsers.Keyword._sampler2DRect
              <|> TokensParsers.Keyword._sampler2DRectShadow
              <|> TokensParsers.Keyword._isampler2DRect
              <|> TokensParsers.Keyword._usampler2DRect
              <|> TokensParsers.Keyword._samplerBuffer
              <|> TokensParsers.Keyword._isamplerBuffer
              <|> TokensParsers.Keyword._usamplerBuffer
              <|> TokensParsers.Keyword._sampler2DMS
              <|> TokensParsers.Keyword._isampler2DMS
              <|> TokensParsers.Keyword._usampler2DMS
              <|> TokensParsers.Keyword._sampler2DMSArray
              <|> TokensParsers.Keyword._isampler2DMSArray
              <|> TokensParsers.Keyword._usampler2DMSArray
              <|> TokensParsers.Keyword._image2D
              <|> TokensParsers.Keyword._iimage2D
              <|> TokensParsers.Keyword._uimage2D
              <|> TokensParsers.Keyword._image3D
              <|> TokensParsers.Keyword._iimage3D
              <|> TokensParsers.Keyword._uimage3D
              <|> TokensParsers.Keyword._imageCube
              <|> TokensParsers.Keyword._iimageCube
              <|> TokensParsers.Keyword._uimageCube
              <|> TokensParsers.Keyword._imageBuffer
              <|> TokensParsers.Keyword._iimageBuffer
              <|> TokensParsers.Keyword._uimageBuffer
              <|> TokensParsers.Keyword._image1D
              <|> TokensParsers.Keyword._iimage1D
              <|> TokensParsers.Keyword._uimage1D
              <|> TokensParsers.Keyword._image1DArray
              <|> TokensParsers.Keyword._iimage1DArray
              <|> TokensParsers.Keyword._uimage1DArray
              <|> TokensParsers.Keyword._image2DRect
              <|> TokensParsers.Keyword._iimage2DRect
              <|> TokensParsers.Keyword._uimage2DRect
              <|> TokensParsers.Keyword._image2DArray
              <|> TokensParsers.Keyword._iimage2DArray
              <|> TokensParsers.Keyword._uimage2DArray
              <|> TokensParsers.Keyword._imageCubeArray
              <|> TokensParsers.Keyword._iimageCubeArray
              <|> TokensParsers.Keyword._uimageCubeArray
              <|> TokensParsers.Keyword._image2DMS
              <|> TokensParsers.Keyword._iimage2DMS
              <|> TokensParsers.Keyword._uimage2DMS
              <|> TokensParsers.Keyword._image2DMSArray
              <|> TokensParsers.Keyword._iimage2DMSArray
              <|> TokensParsers.Keyword._uimage2DMSArray
  
          let constantExpression = preturn () //TODO:
          
          let singleArraySpecifier =
              (TokensParsers.lBracket .>> TokensParsers.rBracket >>. preturn ())
              <|> (TokensParsers.lBracket .>> constantExpression .>> TokensParsers.rBracket >>. preturn ())
          
          let arraySpecifier =
              many1 singleArraySpecifier
          
          ()
      
      let functionDefinition = preturn FunctionDefinition //TODO: To parse uniforms this can probably be skipped
      
      module Declaration =
  