Haskell: ошибка анализа в шаблоне
Кто любит рассказывать мне, что не так с этим кодом (синтаксически)?
-- merge two sorted lists
mergeX [] b res = b ++ res
mergeX a [] res = a ++ res
mergeX a:as b:bs res
| a > b = mergeX as b:bs a:res
| otherwise = mergeX a:as bs b:res
Интерпретатор:
Ошибка анализа в шаблоне: mergeX
Ответы
Ответ 1
Вам нужна скобка:
mergeX [] b res = b ++ res
mergeX a [] res = a ++ res
mergeX (a:as) (b:bs) res
| a > b = mergeX as (b:bs) (a:res)
| otherwise = mergeX (a:as) bs (b:res)
Причина в том, что :
имеет более низкий приоритет, чем приложение-приложение, поэтому mergeX a:as b:bs res
будет анализироваться как:
(mergeX a):(as b):(bs res)
который является ошибкой.
Ответ 2
Вам нужно поместить шаблоны конструктора (или, тем не менее, их вызывать) в скобки.
mergeX (a:as) (b:bs) res