matches
возвращает true, если вся строка соответствует заданному шаблону. find
пытается найти подстроку, которая соответствует шаблону.
Это - или на самом деле аналогичное стремление к типу натуральных чисел (включая 0) - на самом деле является частой жалобой на иерархию числовых классов Хаскелла, которая делает невозможным действительно чистое решение этой проблемы.
Почему? Посмотрите на определение Num
:
class (Eq a, Show a) => Num a where
(+) :: a -> a -> a
(*) :: a -> a -> a
(-) :: a -> a -> a
negate :: a -> a
abs :: a -> a
signum :: a -> a
fromInteger :: Integer -> a
Если вы не вернетесь к использованию error
(что является плохой практикой), вы не сможете предоставить определения для (-)
, negate
и fromInteger
.