我试图制作一个排序函数,对3个或更少元素的列表进行排序,但模式匹配让我感到困惑。
intCMP :: Int -> Int -> Ordering
intCMP a b | a == b =EQ
| a < b = LT
| otherwise = GT
sort3 :: Ord a => (a -> a -> Ordering) -> [a] -> [a]
sort3 _ [] = []
sort3 _ [a] = [a]
sort3 cmp [a,b] = if cmp a b == LT then
[a,b]
else
[b,a]
sort cmp [a,b,c] = [a,b,c]
但我一直收到此错误
*主&GT; sort3 intCMP [1,1,1]
***异常:fun.hs:(7,1) - (12,23):函数sort3中的非详尽模式
答案 0 :(得分:4)
你认为你的最后一个子句实际上是一个名为sort3
的新函数(而不是-Wall
)。启用{{1}}会帮助您发现此类错误。