hlImpsMatch :: Width -> [Implicant] -> ShowS -> ShowS
    hlImpsMatch width imps exprStr = foldl1' (hlInfixOp "|") $ concatMap makeMatch imps
        where
            makeMatch (Imp v 0) = [hlInfixOp "=" exprStr (shows v)]
            makeMatch (Imp v dc) = map (testSubSlice v) $ bitmaskToIntervals $ bitNot width dc

            testSubSlice v careSlice = hlInfixOp "=" (hlBitfield careSlice exprStr)
                (shows (extractBitfield careSlice v))
hlImpsMatch :: Width -> [Implicant] -> ShowS -> ShowS
hlImpsMatch width imps exprStr = foldl1' (hlInfixOp "|") $ concatMap makeMatch imps
        where
            makeMatch (Imp v 0) = [hlInfixOp "=" exprStr (shows v)]
            makeMatch (Imp v dc) = map (testSubSlice v) $ bitmaskToIntervals $ bitNot width dc

            testSubSlice v careSlice = hlInfixOp "=" (hlBitfield careSlice exprStr)
                (shows (extractBitfield careSlice v))
hlImpsMatch width imps exprStr = foldl1' (hlInfixOp "|") $ concatMap makeMatch imps
        where
            makeMatch (Imp v 0) = [hlInfixOp "=" exprStr (shows v)]
            makeMatch (Imp v dc) = map (testSubSlice v) $ bitmaskToIntervals $ bitNot width dc

            testSubSlice v careSlice = hlInfixOp "=" (hlBitfield careSlice exprStr)
                (shows (extractBitfield careSlice v))