diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,8 @@
+## 1.4.18.1
+
+* error handling when checking for stack binary [#1219](https://github.com/yesodweb/yesod/pull/1219)
+* GHC 8 support
+
 ## 1.4.18
 
 * Disable `yesod test` when using Stack [#1198](https://github.com/yesodweb/yesod/issues/1198)
diff --git a/GhcBuild.hs b/GhcBuild.hs
--- a/GhcBuild.hs
+++ b/GhcBuild.hs
@@ -85,12 +85,36 @@
     dflags0 <- GHC.getSessionDynFlags
     (dflags1, _, _) <- GHC.parseDynamicFlags dflags0 argv3
     let pkgFlags = map convertPkgFlag (GHC.packageFlags dflags1)
+        ignorePkgFlags =
+#if __GLASGOW_HASKELL__ >= 800
+            map convertIgnorePkgFlag (GHC.ignorePackageFlags dflags1)
+#else
+            []
+#endif
+        trustPkgFlags =
+#if __GLASGOW_HASKELL__ >= 800
+            map convertTrustPkgFlag (GHC.trustFlags dflags1)
+#else
+            []
+#endif
         hideAll | gopt DF.Opt_HideAllPackages dflags1 = [ "-hide-all-packages"]
                 | otherwise                           = []
         ownPkg = packageString (DF.thisPackage dflags1)
-    return (reverse (extra dflags1) ++ hideAll ++ pkgFlags ++ [ownPkg])
+    return (reverse (extra dflags1) ++ hideAll ++ trustPkgFlags ++ ignorePkgFlags ++ pkgFlags ++ [ownPkg])
   where
-#if __GLASGOW_HASKELL__ >= 710
+#if __GLASGOW_HASKELL__ >= 800
+    convertIgnorePkgFlag (DF.IgnorePackage p)  = "-ignore-package" ++ p
+    convertTrustPkgFlag (DF.TrustPackage p)    = "-trust" ++ p
+    convertTrustPkgFlag (DF.DistrustPackage p) = "-distrust" ++ p
+#else
+    convertPkgFlag (DF.IgnorePackage p)   = "-ignore-package" ++ p
+    convertPkgFlag (DF.TrustPackage p)    = "-trust" ++ p
+    convertPkgFlag (DF.DistrustPackage p) = "-distrust" ++ p
+#endif
+#if __GLASGOW_HASKELL__ >= 800
+    convertPkgFlag (DF.ExposePackage _ (DF.PackageArg p) _)  = "-package" ++ p
+    convertPkgFlag (DF.ExposePackage _ (DF.UnitIdArg p) _)   = "-package-id" ++ p
+#elif __GLASGOW_HASKELL__ == 710
     convertPkgFlag (DF.ExposePackage (DF.PackageArg p) _)    = "-package" ++ p
     convertPkgFlag (DF.ExposePackage (DF.PackageIdArg p) _)  = "-package-id" ++ p
     convertPkgFlag (DF.ExposePackage (DF.PackageKeyArg p) _) = "-package-key" ++ p
@@ -99,10 +123,9 @@
     convertPkgFlag (DF.ExposePackageId p) = "-package-id" ++ p
 #endif
     convertPkgFlag (DF.HidePackage p)     = "-hide-package" ++ p
-    convertPkgFlag (DF.IgnorePackage p)   = "-ignore-package" ++ p
-    convertPkgFlag (DF.TrustPackage p)    = "-trust" ++ p
-    convertPkgFlag (DF.DistrustPackage p) ="-distrust" ++ p
-#if __GLASGOW_HASKELL__ >= 710
+#if __GLASGOW_HASKELL__ >= 800
+    packageString flags = "-package-id" ++ Module.unitIdString flags
+#elif __GLASGOW_HASKELL__ == 710
     packageString flags = "-package-key" ++ Module.packageKeyString flags
 #else
     packageString flags = "-package-id" ++ Module.packageIdString flags ++ "-inplace"
@@ -162,7 +185,9 @@
         haskellish (f,Nothing) =
           looksLikeModuleName f || isHaskellSrcFilename f || '.' `notElem` f
         haskellish (_,Just phase) =
-#if MIN_VERSION_ghc(7,8,3)
+#if MIN_VERSION_ghc(8,0,0)
+          phase `notElem` [As True, As False, Cc, Cobjc, Cobjcxx, CmmCpp, Cmm, StopLn]
+#elif MIN_VERSION_ghc(7,8,3)
           phase `notElem` [As True, As False, Cc, Cobjc, Cobjcpp, CmmCpp, Cmm, StopLn]
 #elif MIN_VERSION_ghc(7,4,0)
           phase `notElem` [As, Cc, Cobjc, Cobjcpp, CmmCpp, Cmm, StopLn]
diff --git a/Keter.hs b/Keter.hs
--- a/Keter.hs
+++ b/Keter.hs
@@ -79,8 +79,8 @@
 
     unless noBuild $ do
         stackQueryRunSuccess <- do
-            (ec,_,_) <- readProcessWithExitCode "stack" ["query"] ""
-            return (ec == ExitSuccess)
+            eres <- try $ readProcessWithExitCode "stack" ["query"] "" :: IO (Either IOException (ExitCode, String, String))
+            return $ either (\_ -> False) (\(ec, _, _) -> (ec == ExitSuccess)) eres
 
         let inStackExec = isJust $ lookup "STACK_EXE" env'
             mStackYaml = lookup "STACK_YAML" env'
diff --git a/main.hs b/main.hs
--- a/main.hs
+++ b/main.hs
@@ -102,7 +102,7 @@
          ] optParser'
   let cabal = rawSystem' (cabalCommand o)
   case optCommand o of
-    Init _          -> error "The init command has been removed. Please use 'stack new' instead"
+    Init _          -> initErrorMsg
     HsFiles         -> mkHsFile
     Configure       -> cabal ["configure"]
     Build es        -> touch' >> cabal ("build":es)
@@ -143,6 +143,17 @@
                 hPutStrLn stderr "'yesod test' is no longer needed with Stack"
                 hPutStrLn stderr "Instead, please just run 'stack test'"
                 exitFailure
+
+    initErrorMsg = do
+        mapM_ putStrLn
+            [ "The init command has been removed."
+            , "Please use 'stack new <project name> <template>' instead where the"
+            , "available templates can be found by running 'stack templates'. For"
+            , "a Yesod based application you should probably choose one of the"
+            , "pre-canned Yesod templates."
+            ]
+        exitFailure
+
 
 handleGhcPackagePath :: IO ([String], Maybe [(String, String)])
 handleGhcPackagePath = do
diff --git a/yesod-bin.cabal b/yesod-bin.cabal
--- a/yesod-bin.cabal
+++ b/yesod-bin.cabal
@@ -1,5 +1,5 @@
 name:            yesod-bin
-version:         1.4.18
+version:         1.4.18.1
 license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
