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