Я хочу перегрузить любого оператора. Я хочу сделать такую простую функцию, которая, например, думает о перегрузке оператора .Overload == такой, что x == y
возвращает x. Или x == y возвращает x + y. Неважно, что. Можете ли вы показать мне простой пример перегрузки оператора? К сожалению, я не могу найти какой-либо пример в Интернете.любой рабочий пример перегрузки оператора в haskell
Например, когда я называю Дерево == Дерево возвращение 5 (она всегда возвращает 5. Я его выбора, она не связана с какой-либо вещи) или когда я называю 3 == 4 возвращение: 7
Я пробовал следующие коды (я нахожу его на haskell.org), но он не может скомпилироваться.
class Eq a where
(==) ::a -> a -> Int
instance Eq Integer where
x == y = 5
instance Eq Float where
x == y = 5
Ни ниже код не работает:
Дерево данных а = Узел | Пустой
класс Дерево где (==) :: Дерево -> Дерево -> Int
экземпляр Tree Integer, где х == у = 1
Я беру ошибку:
Ambiguous occurrence `Eq'
It could refer to either `Main.Eq', defined at Operations.hs:4:7
or `Prelude.Eq',
imported from `Prelude' at Operations.hs:1:1
(and originally defined in `GHC.Classes')
попробуйте только экземпляры частей. Определение typeclass уже сделано в Prelude. Кроме того, скрыть импорт определения прелюдии. – m09
то как перегружать == для деревьев и всегда возвращать 5? – oiyio
Класс 'Eq', определенный в Prelude, требует, чтобы результат' == 'был' Bool', поэтому для возврата '5' вам нужно было бы скрыть это и определить свой собственный. – hammar