因此,我在进行haskell的第一步时,就被要求在课堂上定义“elem”功能。这是我的第一个主意:
elemento :: a -> [a] -> Bool
elemento b listab = foldl (||) False (map (esIgual b) listab)
esIgual :: a -> a -> Bool
esIgual b c = (b == c)
导致
我认为这与b和c未被识别为“Eq a”类型或类似的东西有关,但正如我所说,我在这里还处于婴儿步。有任何想法吗?
最佳答案
esIgual
当前 promise 为同一类型Bool
的任何两个对象返回a
,根本不需要任何类型。但是它使用==
来做到这一点,并且==
仅适用于a
是Eq
的实例,该类型类允许您比较对象是否相等。该需求需要反映在esIgual
的类型签名中,例如:
esIgual :: Eq a => a -> a -> Bool
然后,这还需要传播到
elemento
:elemento :: Eq a => a -> [a] -> Bool