+
+\begin{code}
+matchLiterals all_vars@(var:vars) eqns_info@(EqnInfo ((NPlusKPat master_n k ty ge sub):ps1) _ : eqns) shadows
+ = let
+ (shifted_eqns_for_this_lit, eqns_not_for_this_lit)
+ = partitionEqnsByLit (Just master_n) k eqns_info
+ (shifted_shadows_for_this_lit, shadows_not_for_this_lit)
+ = partitionEqnsByLit (Just master_n) k shadows
+ in
+ match vars shifted_eqns_for_this_lit shifted_shadows_for_this_lit `thenDs` \ inner_match_result ->
+
+ dsExpr (HsApp ge (HsVar var)) `thenDs` \ ge_expr ->
+ dsExpr (HsApp sub (HsVar var)) `thenDs` \ nminusk_expr ->
+
+ mkGuardedMatchResult
+ ge_expr
+ (mkCoLetsMatchResult [NonRec master_n nminusk_expr] inner_match_result)
+ `thenDs` \ match_result1 ->
+
+ if (null eqns_not_for_this_lit)
+ then
+ returnDs match_result1
+ else
+ matchLiterals all_vars eqns_not_for_this_lit shadows_not_for_this_lit `thenDs` \ match_result2 ->
+ combineMatchResults match_result1 match_result2
+\end{code}
+