Haskell, Instance, Type Constraints

63
5

Я создал в Haskell новый класс Eqa

class Eqa a where

(=~) :: a -> a -> Bool

(/~) :: a -> a -> Bool

и хотите определить (=~) же, что и (==) из Prelude. Поэтому я попробовал

instance Eqa Int where            
x=~y = x==y

x/~y = x/=y

но это работает только для Int (конечно). Как мне изменить код, который работает со всеми численными типами?

спросил(а) 2021-01-19T20:10:49+03:00 6 месяцев назад
1
Решение
77

Почему бы просто не написать

(=~) :: Num a => a -> a -> Bool
x=~y = x==y

Если вам действительно не нужен код для разных типов, зачем вам вообще нужен класс?

ответил(а) 2021-01-19T20:10:49+03:00 6 месяцев назад
-4

Все, что вам нужно сделать, это привязать a к Num a или

instance Num a => Eqa a where            
x=~y = x==y
x/~y = x/=y

Дополнительные сведения см. В подразделе "Числовые типы" реального мира Haskell, чтобы понять, какой класс связан с каждым числовым типом.

ответил(а) 2021-01-19T20:10:49+03:00 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема