Пусть у меня есть следующий тип данных:
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 проверить на равенство функции?




