diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,8 @@
+2018.1.27
+---------
+
+* Make it compile with latest Glob
+
 2016.3.19
 ---------
 
diff --git a/nemesis.cabal b/nemesis.cabal
--- a/nemesis.cabal
+++ b/nemesis.cabal
@@ -1,7 +1,7 @@
 name:                 nemesis
 category:             Tools
-version:              2016.3.19
-cabal-version:        >= 1.6
+version:              2018.1.27
+cabal-version:        >= 1.18
 
 license:              BSD3
 license-file:         LICENSE
@@ -10,7 +10,7 @@
 maintainer:           Jinjing Wang <nfjinjing@gmail.com>
 
 build-type:           Simple
-tested-with:          GHC == 7.10.3
+tested-with:          GHC == 8.2.2
 
 synopsis:             a task management tool for Haskell
 description:          Organize common shell tasks into a meaningful tree like structure with dependency tracking
@@ -27,9 +27,10 @@
 
 library
   ghc-options:      -Wall -fno-warn-unused-do-bind
+  default-language: Haskell2010
   build-depends:
                       base > 4 && <= 6
-                    , Glob
+                    , Glob >= 0.9
                     , containers
                     , directory
                     , dlist
@@ -37,10 +38,6 @@
                     , mtl
                     , process
                     , time
-
-                    -- testing
-                    -- , foreign-store >= 0.2
-                    -- , air
 
   hs-source-dirs:     src/
   exposed-modules:
diff --git a/src/System/Nemesis/DSL.hs b/src/System/Nemesis/DSL.hs
--- a/src/System/Nemesis/DSL.hs
+++ b/src/System/Nemesis/DSL.hs
@@ -1,21 +1,20 @@
-{-# LANGUAGE NamedFieldPuns #-}
-
 module System.Nemesis.DSL where
 
-import           Control.Arrow
-import           Control.Lens
-import           Control.Monad.State   hiding (State)
-import           Data.List
-import           Prelude               hiding ((-))
-import           System.Directory
-import           System.Exit
-import           System.FilePath.Glob
-import           System.Nemesis.Driver
-import           System.Nemesis.Type
-import           System.Nemesis.Utils
-import           System.Process
-import           Text.Printf
+import Control.Arrow ((>>>))
+import Control.Lens
+import Control.Monad (when)
+import Data.List (sort, nub)
+import System.Directory (doesFileExist, doesDirectoryExist, removeFile, removeDirectoryRecursive)
+import System.Exit (ExitCode( ExitSuccess, ExitFailure), exitWith)
+import System.FilePath.Glob (globDir, compile)
+import System.Process (system)
+import Text.Printf (printf)
 
+import Prelude hiding ((-))
+import System.Nemesis.Driver
+import System.Nemesis.Type
+import System.Nemesis.Utils
+
 desc :: String -> Unit
 desc = (currentDesc .=) . Just
 
@@ -64,7 +63,7 @@
 clean xs = do
   desc "Remove any temporary products."
   task "clean" - do
-    paths <- globDir (xs & map compile) "." <&> fst <&> concat <&> nub <&> sort <&> reverse
+    paths <- globDir (xs & map compile) "." <&> concat <&> nub <&> sort <&> reverse
     mapM_ rmAny paths
     where
       rmAny s = do
diff --git a/src/System/Nemesis/Driver.hs b/src/System/Nemesis/Driver.hs
--- a/src/System/Nemesis/Driver.hs
+++ b/src/System/Nemesis/Driver.hs
@@ -1,19 +1,17 @@
-{-# LANGUAGE TemplateHaskell #-}
-
 module System.Nemesis.Driver where
 
-import           Control.Arrow        ((>>>))
+import           Control.Arrow ((>>>))
 import           Control.Lens
-import           Control.Monad.State  hiding (State, join)
-import           Data.List
-import qualified Data.Map             as Map
-import           Data.Monoid
-import           Prelude              hiding ((-))
-import           System.Environment
-import           System.Nemesis.Type
-import           System.Nemesis.Utils
-import           Text.Printf
+import           Control.Monad.State (get, put, execStateT)
+import           Data.List (intercalate, isPrefixOf, sort)
+import qualified Data.Map as Map
+import           Data.Monoid ((<>))
+import           Prelude hiding ((-))
+import           System.Environment (getArgs)
+import           Text.Printf (printf)
 
+import           System.Nemesis.Type
+import           System.Nemesis.Utils ((-), ljust)
 
 
 displayName :: Task -> String
diff --git a/src/System/Nemesis/Type.hs b/src/System/Nemesis/Type.hs
--- a/src/System/Nemesis/Type.hs
+++ b/src/System/Nemesis/Type.hs
@@ -2,12 +2,12 @@
 
 module System.Nemesis.Type where
 
-import           Control.Lens
-import           Control.Monad.State hiding (State, join)
-import           Data.Function
-import           Data.List
-import           Data.Map            (Map)
-import           Prelude             hiding ((-))
+import Control.Lens
+import Control.Monad.State (StateT)
+import Data.Function (on)
+import Data.List (intercalate)
+import Data.Map (Map)
+import Prelude hiding ((-))
 
 newtype ShowIO = ShowIO {unShowIO :: IO () }
 
diff --git a/src/System/Nemesis/Utils.hs b/src/System/Nemesis/Utils.hs
--- a/src/System/Nemesis/Utils.hs
+++ b/src/System/Nemesis/Utils.hs
@@ -2,7 +2,7 @@
 
 module System.Nemesis.Utils where
 
-import           Prelude          hiding ((-))
+import Prelude hiding ((-))
 
 infixr 0 -
 {-# INLINE (-) #-}
