
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 On Tue, Dec 23, 2008 at 10:48 PM, Henning Thielemann wrote:
Andrew Wagner schrieb:
The problem here is even slightly deeper than you might realize. For example, what if you have a list of functions. How do you compare two functions to each other to see if they're equal? There is no good way really to do it! So, not only is == not completely polymorphic, but it CAN'T be.
There is a nice solution for this, however, and it's very simple:
contain :: Eq a -> [a] -> Bool contain x [] = False contain x (y:ys) = if x == y then True else contain x ys
Would HLint jump in here and suggest: contain x (y:ys) = x == y || contain x ys ? Or even "replace 'contain' by 'elem'" ?
I just tried it out. hlint makes no suggestions. Incidentally, your syntax is wrong. Should be: contain :: (Eq a) => a -> [a] -> Bool contain _ [] = False contain x (y:ys) = if x == y then True else contain x ys - -- gwern -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) iEYEAREKAAYFAklRtvAACgkQvpDo5Pfl1oKTLQCgixTp95VA8ccRxuWTpIgXVo2k +XkAniyWDU6f1sSCzdUuJIq4pAcgDS0K =Uhkz -----END PGP SIGNATURE-----