2014-02-19 34 views
0

差異列表,我試圖讓兩個列表之間的區別是這樣的:與未知的數據類型

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

其中a可以是任何數據類型。 \\的問題在於a不是Ord的實例。有一個聰明的解決方案嗎?我嘗試了複雜的東西,我第一次刪除a,然後試圖比較這兩個列表,但它變得非常混亂......我想這可以巧妙地完成map什麼的,但我仍然是新來的Haskell所以我沒有'真的有它的竅門。

+1

你怎麼能指望做至少沒有'Eq'約束?你是說你只想看兩個'Char'元素並且根據它進行比較? – asm

+0

你應該給我們一個例子。如果在比較三元組時忽略第三個組件,則有一個解決方案。 – ErikR

+0

是的,我想忽略第三個組件,抱歉不清楚! – hboy

回答

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