我正试图在这两个列表之间找到区别:
[(Char, Char, a)] -> [(Char, Char, a)] -> [(Char, Char, a)]
其中a
可以是任何数据类型。执行\\
的问题是a
不是Ord
的实例。有智能解决方案吗?我尝试制作复杂的东西,我首先删除a
,然后尝试比较两个列表,但它变得非常混乱...我想它可以用map
或者其他东西巧妙地完成但我是仍然是Haskell的新手,所以我还没有真正掌握它。
答案 0 :(得分:3)
为了做到这一点,你绝对需要类型
的东西eq :: (Char, Char, a) -> (Char, Char, a) -> Bool
如果你不能这样做,那么就没有理智的方法来找到差异。想象一下,如果我决定a
为IO ()
,显然IO ()
之间没有明确的平等,所以如果你想保持a
真正的多态,你必须忽略它比较测试。
这很容易实现
compChars (c1, c2, _) (c1', c2', _) = c1 == c1' && c2 == c2'
现在我们可以\\
提供的Data.List
的一般版本,deleteFirstsBy
(没有关于命名方案的线索)
diff = deleteFirstsBy compChars