Я только начинаю проникать в мир функционального программирования в классе. В качестве части назначения нам необходимо написать функцию, которая определяет, является ли список одиночным или нет (если список имеет ровно один элемент внутри него)Haskell «Нет экземпляра для (Eq a), возникающего из-за использования`/= '"
Я написал функцию, и она отлично работает :
singleton x = x /= [] && x == take 1 (x)
Если я вызываю singleton [1], он возвращает true, как ожидалось. Если я вызываю singleton [] или singleton [1,2,3], он возвращает false, как ожидалось.
Однако, мой профессор хочет, чтобы должным образом документировать код с (я не совсем уверен, что это называется, но это говорит Haskell, чего ожидать, как вход и выход из функции):
singleton :: [a] -> Bool
Насколько я могу судить, это должно сработать, но как только у меня получится, компилятор говорит: «Нет примера для (Eq a), возникающего из-за использования«/= »
Может ли кто-нибудь указать мне в правильном направлении получить код, скомпилированный с этим (я действительно не знаю, что это называется) бит объявления функции?
Спасибо!
Возможный дубликат [Haskell: Нет экземпляра для (Eq a), возникающего из-за использования \ '== '] (http://stackoverflow.com/questions/16154592/haskell-no-instance-for-eq- a-возникающий из-за-использования) – Mephy
Я не думаю, что это то же самое, потому что в этом другом вопросе функция действительно * нуждается в 'Eq a', в то время как в этом ее можно переписать, чтобы избежать ее , –
@ ØrjanJohansen Я думаю, что это то же самое. Ваша функция тоже нуждается в этом. Когда вы проверяете, является ли [a] == [a], подразумевается проверка равенства a. – piojo