Просто начал использовать Haskell и понял (насколько я могу судить), что нет прямого способа проверить строку, чтобы увидеть, содержит ли она меньшую строку. Поэтому я решил попробовать.
По сути, идея заключалась в том, чтобы проверить, одинакового ли размера две строки и равны ли они. Если проверяемая строка была длиннее, рекурсивно отрезать голову и запустить проверку снова, пока проверяемая строка не станет одинаковой длины.
Для остальных возможностей я использовал сопоставление с образцом. Вот что у меня получилось:
stringExists "" wordToCheckAgainst = False
stringExists wordToCheckFor "" = False
stringExists wordToCheckFor wordToCheckAgainst | length wordToCheckAgainst < length wordToCheckFor = False
| length wordToCheckAgainst == length wordToCheckFor = wordToCheckAgainst == wordToCheckFor
| take (length wordToCheckFor) wordToCheckAgainst == wordToCheckFor = True
| otherwise = stringExists wordToCheckFor (tail wordToCheckAgainst)