diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
 
 See full history at: <https://github.com/faylang/fay/commits>
 
+#### 0.24.0.3 (2019-04-29)
+
+* Dependency updates including GHC-8.6 support.
+
 #### 0.24.0.2
 
 * Fix dependent compilation fail when building project with stack (#457).
diff --git a/fay.cabal b/fay.cabal
--- a/fay.cabal
+++ b/fay.cabal
@@ -1,5 +1,5 @@
 name:                fay
-version:             0.24.0.2
+version:             0.24.0.3
 synopsis:            A compiler for Fay, a Haskell subset that compiles to JavaScript.
 description:         Fay is a proper subset of Haskell which is type-checked
                      with GHC, and compiled to JavaScript. It is lazy, pure, has a Fay monad,
@@ -139,11 +139,11 @@
     Language.Haskell.Names.Types
     Paths_fay
   build-depends:
-      base >= 4.9 && < 4.12
+      base >= 4.9 && < 4.13
     , base-compat >= 0.10 && < 0.11
     , aeson > 0.6 && < 1.5
     , bytestring >= 0.9 && < 0.11
-    , containers >= 0.4 && < 0.6
+    , containers >= 0.4 && < 0.7
     , data-default >= 0.2 && < 0.8
     , data-lens-light == 0.1.*
     , directory >= 1.1 && < 1.4
diff --git a/src/Fay/Compiler.hs b/src/Fay/Compiler.hs
--- a/src/Fay/Compiler.hs
+++ b/src/Fay/Compiler.hs
@@ -121,7 +121,7 @@
 -- | Compile a parse HSE module.
 compileModuleFromAST :: ([JsStmt], [JsStmt]) -> F.Module -> Compile ([JsStmt], [JsStmt])
 compileModuleFromAST (hstmts0, fstmts0) mod'@Module{} = do
-  mod@(Module _ _ pragmas _ decls) <- annotateModule Haskell2010 defaultExtensions mod'
+  ~mod@(Module _ _ pragmas _ decls) <- annotateModule Haskell2010 defaultExtensions mod'
   let modName = unAnn $ F.moduleName mod
   modify $ \s -> s { stateUseFromString = hasLanguagePragmas ["OverloadedStrings", "RebindableSyntax"] pragmas
                    }
diff --git a/src/Fay/Compiler/Import.hs b/src/Fay/Compiler/Import.hs
--- a/src/Fay/Compiler/Import.hs
+++ b/src/Fay/Compiler/Import.hs
@@ -50,7 +50,7 @@
       st
       (parseResult (throwError . uncurry ParseError)
                    (\mod' -> do
-                     mod@(Module _ _ _ imports _) <-
+                     ~mod@(Module _ _ _ imports _) <-
                        either throwError return =<< io (before F.noI mod')
                      res <- foldr (<>) mempty <$> mapM (compileImport compileModule) imports
                      modify $ \s -> s { stateModuleName = unAnn $ F.moduleName mod }
diff --git a/src/Fay/Compiler/InitialPass.hs b/src/Fay/Compiler/InitialPass.hs
--- a/src/Fay/Compiler/InitialPass.hs
+++ b/src/Fay/Compiler/InitialPass.hs
@@ -51,7 +51,7 @@
 preprocessAST :: () -> F.Module -> Compile ()
 preprocessAST () mod@(Module _ _ _ _ decls) = do
   -- This can only return one element since we only compile one module.
-  ([exports],_) <- HN.getInterfaces Haskell2010 defaultExtensions [mod]
+  ~([exports],_) <- HN.getInterfaces Haskell2010 defaultExtensions [mod]
   modify $ \s -> s { stateInterfaces = M.insert (stateModuleName s) exports $ stateInterfaces s }
   forM_ decls scanTypeSigs
   forM_ decls scanRecordDecls
diff --git a/src/Fay/Convert.hs b/src/Fay/Convert.hs
--- a/src/Fay/Convert.hs
+++ b/src/Fay/Convert.hs
@@ -139,7 +139,7 @@
 parseTuple :: Data a => GenericParser -> DataType -> Vector Value -> Either String a
 parseTuple rec typ arr =
   case dataTypeConstrs typ of
-    [cons] -> evalStateT (fromConstrM (do i:next <- get
+    [cons] -> evalStateT (fromConstrM (do ~(i:next) <- get
                                           put next
                                           value <- lift (Vector.indexM arr i)
                                           lift (rec value))
@@ -164,7 +164,7 @@
 -- | Make a simple ADT constructor from an object: { "slot1": 1, "slot2": 2} -> Foo 1 2
 makeSimple :: Data a => GenericParser -> HashMap Text Value -> Constr -> Either String a
 makeSimple rec obj cons =
-  evalStateT (fromConstrM (do i:next <- get
+  evalStateT (fromConstrM (do ~(i:next) <- get
                               put next
                               value <- lift (lookupField obj (Text.pack ("slot" ++ show i)))
                               lift (rec value))
@@ -176,7 +176,7 @@
 makeRecord rec obj cons =
   evalStateT $
     fromConstrM
-      (do key:next <- get
+      (do ~(key:next) <- get
           put next
           value <- lift (lookupField obj (Text.pack key))
           lift $ rec value)
