Я накручиваю свою собственную elem
функцию под названием elem'
elem' :: (Eq a) => a -> [a] -> Bool
elem' n ys = foldl (\acc p -> if (p == n) then True else False) False ys
Кажется, работает, но я хочу быстро проверить это в GHCi, поэтому import Test.QuickCheck
verboseCheck (\a -> (\xs ->( (elem' a xs) == (elem a xs)) ) )
Без объявления типа в тестовой функции он проверяет нормально, но это потому, что он проверяет только нулевые входы.
Что-то не так с моим объявлением типа для тестовой функции:
verboseCheck (\a->(\xs->((elem' a xs)==(elem a xs))) :: Int->[Int]->Bool)
verboseCheck (\a->(\xs->((elem' a xs)==(elem a xs))) :: Char->[Char]->Bool)
Ошибка для первого:
• Couldn't match expected type ‘[Int] -> Bool’
with actual type ‘Bool’
• Possible cause: ‘(==)’ is applied to too many arguments
In the expression: ((elem' a xs) == (elem a xs))
In the expression:
(\ xs -> ((elem' a xs) == (elem a xs))) :: Int -> [Int] -> Bool
In the first argument of ‘verboseCheck’, namely
‘(\ a
-> (\ xs -> ((elem' a xs) == (elem a xs))) ::
Int -> [Int] -> Bool)’
<interactive>:258:39: error:
• Couldn't match expected type ‘[()]’ with actual type ‘Int’
• In the second argument of ‘elem'’, namely ‘xs’
In the first argument of ‘(==)’, namely ‘(elem' a xs)’
In the expression: ((elem' a xs) == (elem a xs))
<interactive>:258:54: error:
• Couldn't match expected type ‘[()]’ with actual type ‘Int’
• In the second argument of ‘elem’, namely ‘xs’
In the second argument of ‘(==)’, namely ‘(elem a xs)’
In the expression: ((elem' a xs) == (elem a xs))
if E then True else False
обычно пишетсяE
. - person molbdnilo   schedule 26.05.2021