Begginer Haskell Question. На самом деле я нашел очень похож вопрос Haskell error: "non-exhaustive patterns"Еще один «Неисчерпывающие шаблоны в функции»
Интерактивная оболочка:
Prelude> merge [] [] = []
Prelude> merge (x:xs) [] = x:xs
Prelude> merge [] (y:ys) = y:ys
Prelude> -- merge (x:xs) (y:ys)
Prelude> merge [][]
Exception
Prelude> merge [0][]
Exception: <interactive>:3:1-22: Non-exhaustive patterns in function merge
Prelude> merger [][0]
OK
В самом деле исключения существуют также в не интерактивном режиме
main = do
print (merge [1,2,3] [])
print (merge [] [1,2,3])
print (merge [] [])
merge :: (Ord a) => [a] -> [a] -> [a]
merge (x:xs) [] = x:xs
merge [] (y:ys) = y:ys
merge [][] = []
Однако это зависит от порядка particulas частных случаев слияния где появляется ошибка. Я не знаю, почему это происходит. Заранее спасибо.
К сожалению, новая версия GHC действительно позволяет опустить 'let', поэтому каждая строка затмевает предыдущий – Alec
@Alec: TIL. Благодаря! – pyon
Обратите внимание, что вы не только исправили ошибки синтаксиса, но и исправили код. Функция OPs по-прежнему выдает ошибку, если она определена в файле, потому что нет 'merge (x: xs) (y: ys) = ..' case – user2407038