具有未知数据类型的列表的差异

时间:2014-02-19 18:17:34

标签: list haskell polymorphism

我正试图在这两个列表之间找到区别:

[(Char, Char, a)] -> [(Char, Char, a)] -> [(Char, Char, a)]

其中a可以是任何数据类型。执行\\的问题是a不是Ord的实例。有智能解决方案吗?我尝试制作复杂的东西,我首先删除a,然后尝试比较两个列表,但它变得非常混乱...我想它可以用map或者其他东西巧妙地完成但我是仍然是Haskell的新手,所以我还没有真正掌握它。

1 个答案:

答案 0 :(得分:3)

为了做到这一点,你绝对需要类型

的东西
eq :: (Char, Char, a) -> (Char, Char, a) -> Bool

如果你不能这样做,那么就没有理智的方法来找到差异。想象一下,如果我决定aIO (),显然IO ()之间没有明确的平等,所以如果你想保持a真正的多态,你必须忽略它比较测试。

这很容易实现

compChars (c1, c2, _) (c1', c2', _) = c1 == c1' && c2 == c2'

现在我们可以\\提供的Data.List的一般版本,deleteFirstsBy(没有关于命名方案的线索)

 diff = deleteFirstsBy compChars