Как использовать классы типов конверсии - PullRequest
0 голосов
/ 17 декабря 2018

Здравствуйте, у меня проблемы с пониманием того, что typeclass мне нужно реализовать для выполнения математических операций с Int и Double (пока).

data Numeric=I Int | D Double deriving (Show)

Я хочу бытьспособен выполнять: +, -, *, / на I с D, сравнивать их и заказывать. Какой класс типов мне нужно реализовать?Num, Integral, Ord?

1 Ответ

0 голосов
/ 17 декабря 2018

Вам нужно, чтобы ваш экземпляр класса Num имел +, -, * и самый важный fromInteger, а экземпляр Fractional имел / и fromRational.

Вот небольшая заглушка для упрощенной версии:

data Numeric = N Double
   deriving Show

instance Num Numeric where
   (*) (N a) (N b) = N (a * b) 
   (+) (N a) (N b) = N (a + b) 
   (-) (N a) (N b) = N (a - b) 
   abs (N a) = N $ abs a
   signum (N a) = N $ signum a
   fromInteger a = N $ fromInteger a

instance Fractional Numeric where
   fromRational d = N $ fromRational d
   (/) (N a) (N b) = N (a / b) 
...