- Используйте сопоставление с образцом в определении функции вместо портянки if/else
v == h_w
тут вообще не должно компилироваться, т.к. v
по определению это список, а h_w
это элемент списка (head
).
- Пропущен случай, когда список
v
пустой. При соблюдении первого правила такие ошибки легче находятся
А теперь по алгоритму. Он у вас более императивный, чем функциональный.
Если вам не нужно строить структуру данных (например заполнять дерево) по ходу выполнения алгоритма, то зачастую от рекурсии можно отказаться.
isSublist :: Eq a => [a] -> [a] -> Bool
isSublist a b = all (`elem` b) a
Если elem использовать нельзя, то можно эту функцию самому определить.