Ошибка синтаксического анализа в Guards (Haskell)

У меня есть следующий код

reconocerCliente :: Cliente -> Cliente -> Cliente
reconocerCliente cliente otroCliente
       | verificarCliente cliente otroCliente = cliente {amigos = otroCliente : amigos}
       | otherwise = id cliente

Это используемые функции:

verificarCliente :: Cliente -> Cliente -> Bool
verificarCliente cliente otroCliente = (esElMismo cliente otroCliente) && not(any(== otroCliente) amigos)

esElMismo :: Cliente -> Cliente -> Bool
esElMismo (Uncliente nombre _ _ _) (Uncliente otroNombre _ _ _) = nombre /= otroNombre

Каждый раз, когда я компилирую, я получаю «ошибка: ошибка синтаксического анализа при вводе ‘|’»

Именно в этой строке:

   | verificarCliente cliente otroCliente = cliente {amigos = otroCliente : amigos}

Я не знаю, связана ли моя проблема с отступом (это делается с пробелами, а не с вкладками) или с моими охранниками


person Felipe Otero    schedule 27.04.2017    source источник


Ответы (1)


Вставленный вами код не содержит синтаксических ошибок: он отлично работает, когда я вставляю его в файл .hs с соответствующим определением для Cliente.

Единственная ошибка, которая у вас есть, не вызовет сообщения об ошибке, которое вы получаете:

cliente {amigos = otroCliente : amigos}

Второе вхождение amigos здесь имеет неверный тип: вспомните, что amigos — это функция, определенная вашей записью. Он не сопоставляется неявно с образцом с cliente. Вместо этого вы можете написать что-то вроде:

cliente {amigos = otroCliente : amigos cliente}
person amalloy    schedule 27.04.2017
comment
Спасибо за быстрый ответ: data Cliente = Uncliente {nombre::String,resistencia::Int,bebidas::[Bebida],amigos::[Cliente]} производный (Show) тип Bebida = Cliente -> Cliente Это мои данные и типы. я изменил поле Amigos, но я продолжаю получать эту ошибку Parse на '|' - person Felipe Otero; 28.04.2017