       @buildSimpleSuggestion 'keyword', s, prefix, label
 
   getSuggestions: =>
-    if @isIn(@typeScope)
+    if @isIn(@instancePreprocessorScope)
+      @preprocessorSuggestions(@instancePragmaWords)
+    else if @isIn(@typeScope)
       @symbolSuggestions @backend.getCompletionsForType
     else if @isIn(@moduleScope)
       @moduleSuggestions()
     else if @isIn(@exportsScope)
       @symbolSuggestions @backend.getCompletionsForSymbolInModule
     else if @isIn(@preprocessorScope)
-      @preprocessorSuggestions()
+      @preprocessorSuggestions(@pragmaWords)
     #should be last as least sepcialized
     else if @isIn(@sourceScope)
       if @getPrefix().startsWith '_'

    @processSuggestions @backend.getCompletionsForModule, (s, prefix) =>
      @buildSimpleSuggestion 'import', s, prefix

  preprocessorSuggestions: =>
    kwrx = new RegExp "\\b(#{@pragmaWords.join('|')})\\b"
    kw = @lineSearch kwrx
    label = ''
    rx = undefined

  sourceScope: ['source.haskell']
  moduleScope: ['meta.import.haskell', 'support.other.module.haskell']
  preprocessorScope: ['meta.preprocessor.haskell']
  instancePreprocessorScope: ['meta.declaration.instance.haskell', 'meta.preprocessor.haskell']
  exportsScope: ['meta.import.haskell', 'meta.declaration.exports.haskell']

  pragmaWords: [
    'LANGUAGE', 'OPTIONS_GHC', 'INCLUDE', 'WARNING', 'DEPRECATED', 'INLINE',
    'NOINLINE', 'ANN', 'LINE', 'RULES', 'SPECIALIZE', 'UNPACK', 'SOURCE'
  ]

  instancePragmaWords: [
    'INCOHERENT'
    'OVERLAPPABLE'
    'OVERLAPPING'
    'OVERLAPS'
  ]

  constructor: (@options, @backend) ->
