diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,11 @@
 # Revision history for haskell-lsp
 
+## 0.8.2.0 -- 2019-04-11
+
+* Add `applyTextEdit` and `editTextEdit` helpers
+* Set the typedefinitionProvider capability if it has a handler
+* Add stack files for GHC 8.4.4 and 8.6.4
+
 ## 0.8.1.0 -- 2019-02-28
 
 * Update Handler to delegate to typeDefinitionHandler instead of
diff --git a/haskell-lsp.cabal b/haskell-lsp.cabal
--- a/haskell-lsp.cabal
+++ b/haskell-lsp.cabal
@@ -1,5 +1,5 @@
 name:                haskell-lsp
-version:             0.8.1.0
+version:             0.8.2.0
 synopsis:            Haskell library for the Microsoft Language Server Protocol
 
 description:         An implementation of the types, and basic message server to
@@ -99,6 +99,7 @@
                        ServerCapabilitiesSpec
                        URIFilePathSpec
                        VspSpec
+                       WorkspaceEditSpec
                        WorkspaceFoldersSpec
   build-depends:       base
                      , aeson
diff --git a/src/Language/Haskell/LSP/Core.hs b/src/Language/Haskell/LSP/Core.hs
--- a/src/Language/Haskell/LSP/Core.hs
+++ b/src/Language/Haskell/LSP/Core.hs
@@ -600,6 +600,12 @@
           supported (Just _) = Just True
           supported Nothing   = Nothing
 
+          -- If a dynamic setting is provided use it, else set a
+          -- static True if there is a handler.
+          static (Just d) _ = Just d
+          static _ (Just _) = Just (J.GotoOptionsStatic True)
+          static _ Nothing  = Nothing
+
           sync = case textDocumentSync o of
                   Just x -> Just (J.TDSOptions x)
                   Nothing -> Nothing
@@ -618,7 +624,7 @@
               , J._completionProvider               = completionProvider o
               , J._signatureHelpProvider            = signatureHelpProvider o
               , J._definitionProvider               = supported (definitionHandler h)
-              , J._typeDefinitionProvider           = typeDefinitionProvider o
+              , J._typeDefinitionProvider           = static (typeDefinitionProvider o) (typeDefinitionHandler h)
               , J._implementationProvider           = implementationProvider o
               , J._referencesProvider               = supported (referencesHandler h)
               , J._documentHighlightProvider        = supported (documentHighlightHandler h)
diff --git a/test/WorkspaceEditSpec.hs b/test/WorkspaceEditSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/WorkspaceEditSpec.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE OverloadedStrings #-}
+module WorkspaceEditSpec where
+
+import Test.Hspec
+import Language.Haskell.LSP.Types
+
+spec :: Spec
+spec = do
+  describe "applyTextEdit" $ do
+    it "inserts text" $
+      let te = TextEdit (Range (Position 1 2) (Position 1 2)) "foo"
+        in applyTextEdit te "lorem\nipsum\ndolor" `shouldBe` "lorem\nipfoosum\ndolor"
+    it "deletes text" $
+      let te = TextEdit (Range (Position 0 2) (Position 1 2)) ""
+        in applyTextEdit te "lorem\nipsum\ndolor" `shouldBe` "losum\ndolor"
+    it "edits a multiline text" $
+      let te = TextEdit (Range (Position 1 0) (Position 2 0)) "slorem"
+        in applyTextEdit te "lorem\nipsum\ndolor" `shouldBe` "lorem\nsloremdolor"
+
+  describe "editTextEdit" $
+    it "edits a multiline text edit" $
+      let orig = TextEdit (Range (Position 1 1) (Position 2 2)) "hello\nworld"
+          inner = TextEdit (Range (Position 0 3) (Position 1 3)) "ios\ngo" 
+          expected = TextEdit (Range (Position 1 1) (Position 2 2)) "helios\ngold"
+         in editTextEdit orig inner `shouldBe` expected
