因此,我在进行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,根本不需要任何类型。但是它使用==来做到这一点,并且==仅适用于aEq的实例,该类型类允许您比较对象是否相等。该需求需要反映在esIgual的类型签名中,例如:

esIgual :: Eq a => a -> a -> Bool

然后,这还需要传播到elemento:
elemento :: Eq a => a -> [a] -> Bool

10-06 14:07