diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Revision history for chr
 
+## 0.1.0.4  -- 2018-08-18
+
+* ghc 8.4
+
 ## 0.1.0.3  -- 2018-04-27
 
 * comment cleanup
diff --git a/chr-core.cabal b/chr-core.cabal
--- a/chr-core.cabal
+++ b/chr-core.cabal
@@ -2,7 +2,7 @@
 -- see http://haskell.org/cabal/users-guide/
 
 name:                chr-core
-version:             0.1.0.4
+version:             0.1.1.0
 synopsis:            Constraint Handling Rules
 description:         Constraint Handling Rules evaluation engine
 license:             BSD3
@@ -51,6 +51,6 @@
     -- fclabels >= 2.0.3,
     chr-data >= 0.1.0.1,
     chr-pretty >= 0.1.0.0,
-    logict-state >= 0.1.0.5
+    logict-state >= 0.1.1.0
   hs-source-dirs:      src
   default-language:    Haskell2010
diff --git a/src/CHR/Types/Core.hs b/src/CHR/Types/Core.hs
--- a/src/CHR/Types/Core.hs
+++ b/src/CHR/Types/Core.hs
@@ -425,8 +425,10 @@
 -- | Lift into CHRMatcher
 chrmatcherLift :: (LookupApply subst subst) => (subst -> Maybe subst) -> CHRMatcher subst ()
 chrmatcherLift f = do
-    [sl,sg] <- fmap Lk.unlifts $ getl chrmatcherstateVarLookup -- gets (unStackedVarLookup . _chrmatcherstateVarLookup)
-    maybe chrMatchFail (\snew -> chrmatcherstateVarLookup =$: (Lk.apply snew)) $ f sg
+    stLk <- getl chrmatcherstateVarLookup -- gets (unStackedVarLookup . _chrmatcherstateVarLookup)
+    case Lk.unlifts stLk of
+      [sl,sg] -> maybe chrMatchFail (\snew -> chrmatcherstateVarLookup =$: (Lk.apply snew)) $ f sg
+      _ -> chrMatchFail
 
 -- | Run a CHRMatcher
 chrmatcherRun' :: (CHREmptySubstitution subst) => (CHRMatcherFailure -> r) -> (subst -> CHRWaitForVarSet subst -> x -> r) -> CHRMatcher subst x -> CHRMatchEnv (VarLookupKey subst) -> StackedVarLookup subst -> r
