Пусть у меня есть следующий тип данных:
data SomeDataType
= SomeDataType { name :: String,
func :: String -> String }
Мне необходимо сравнивать экземпляры этого типа. Добавляю deriving(Eq). Получаю:
example.hs:4:14:
No instance for (Eq (String -> String))
arising from the 'deriving' clause of a data type declaration
at example.hs:4:14-15
Possible fix:
add an instance declaration for (Eq (String -> String))
or use a standalone 'deriving instance' declaration instead,
so you can specify the instance context yourself
When deriving the instance for (Eq SomeDataType)
Это можно вылечить, указав что следует сравнивать только поля:
instance Eq SomeDataType where
x == y = (name x) == (name y)
Works. Но всё-таки это не дело.
Собственно, как в Haskell проверить на равенство функции?