diff --git a/src/Control/Egison/Matcher/Collection.hs b/src/Control/Egison/Matcher/Collection.hs
--- a/src/Control/Egison/Matcher/Collection.hs
+++ b/src/Control/Egison/Matcher/Collection.hs
@@ -77,7 +77,9 @@
   {-# INLINE elmM #-}
   elmM (List m) _ = m
   {-# INLINE joinCons #-}
-  joinCons (_, _, _) (List _) = f []
+  joinCons (WC, _, WC) (List _) tgt = [ (undefined, x, undefined) | x <- tgt ]
+  joinCons (WC, _, _) (List _) tgt = [ (undefined, x, rs) | (x:rs) <- tails tgt ]
+  joinCons (_, _, _) (List _) tgt = f [] tgt
    where
     f _ [] = []
     f rhs (x : ts) = (reverse rhs, x, ts) : f (x : rhs) ts
diff --git a/src/Control/Egison/QQ.hs b/src/Control/Egison/QQ.hs
--- a/src/Control/Egison/QQ.hs
+++ b/src/Control/Egison/QQ.hs
@@ -184,7 +184,7 @@
   go (Pat.Pattern cName ps) mName tName body | all isPatVar ps = do
     mNames <- mapM (\_ -> newName "tmpM") ps
     tNames <- mapM (\_ -> newName "tmpT") ps
-    let pps = map toPP ps
+    let pps = map (Just . toPP) ps
     body' <- foldrM go' body (zip3 ps mNames tNames)
     pure
       $        AppE
@@ -194,7 +194,7 @@
   go (Pat.Pattern cName ps) mName tName body = do
     mNames <- mapM (\_ -> newName "tmpM") ps
     tNames <- mapM (\_ -> newName "tmpT") ps
-    let pps = map toPP ps
+    let pps = map (Just . toPP) ps
     body' <- foldrM go' body (zip3 ps mNames tNames)
     pure
       $        let_
diff --git a/sweet-egison.cabal b/sweet-egison.cabal
--- a/sweet-egison.cabal
+++ b/sweet-egison.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.0
 name:               sweet-egison
-version:            0.1.1.0
+version:            0.1.1.1
 synopsis:
   Shallow embedding implementation of non-linear pattern matching
 
@@ -47,7 +47,7 @@
     , haskell-src-exts
     , haskell-src-meta
     , logict                      ^>=0.7.0
-    , template-haskell
+    , template-haskell            >= 2.16.0.0
     , transformers
 
   ghc-options:
