Eq を複数回使用したいので、最初の連符の 2 番目の要素が残りの要素とは別の型になります。
間違っていますが、それは私が欲しいアイデアです
例えば。[(a, a)] -> [(a, a)] -> ブール ----> [(a, b)] -> [(a, a)] -> ブール
コード
canColor :: Eq a => [(a, a)] -> [(a, a)] -> Bool
canColor _ [] = True
canColor xs ((x,y):rest) =
if findNeighbour xs x == findNeighbour xs y
then False
else canColor xs rest
findNeighbour :: Eq a => [(a, a)] -> a -> Maybe a
findNeighbour [] _ = Nothing
findNeighbour ((x,y):rest) z =
if x == z
then Just y
else findNeighbour rest z
入力データと期待値
Main> canColor [('a',"purple"),('b',"green"),('c',"blue")] [('a','b'),('b','c'),('c','a')]
True
Main> canColor [('a',"purple"),('b',"green"),('c',"purple")] [('a','b'),('b','c'),('c','a')]
False
Main> canColor [('1',"purple"),('2',"green"),('3',"blue")] [('1','2'),('2','3'),('3','1')]
True
**Main> canColor [('a', 4),('b',5),('c', 6 )] [('a','b'),('b','c'),('c','a')]
True
Main> colors [('a', 4),('b', 4 ),('c', 5 )] [('a','b'),('b','c'),('c','a')]
False**