subsBinding fname ((BList ((BVar head'),(BVar tail'))):bs) es'@(e:es) ex
    | isListExpr e = do
        sub1 <- (subs ex head' (listHead e))
        sub2 <- (subs sub1 tail' (listTail e))
        subsBinding fname bs es sub2
    | otherwise = throwError $ Fallback $ "could not match " ++ (show e) ++ " agains a list or string"
subsBinding fname ((BList ((BVar head'),(BVar tail'))):bs) es'@(e:es) ex
    | isListExpr e = do
        sub1 <- (subs ex head' (listHead e))
        sub2 <- (subs sub1 tail' (listTail e))
        subsBinding fname bs es sub2
    | otherwise = throwError $ Fallback $ "could not match " ++ (show e) ++ " agains a list or string"
subsBinding fname ((BList ((BVar head'),(BVar tail'))):bs) es'@(e:es) ex
    | isListExpr e = do
        sub1 <- (subs ex head' (listHead e))
        sub2 <- (subs sub1 tail' (listTail e))
        subsBinding fname bs es sub2
    | otherwise = throwError $ Fallback $ "could not match " ++ (show e) ++ " agains a list or string"