Не может поднять сложный Int к власти - PullRequest
0 голосов
/ 24 июня 2018

Кажется, что повышение Complex Int до степени нарушает некоторый контракт в его случаях.Я не прав?

минимальный пример ниже

compl :: Complex Int -> Maybe (Complex Int)
compl d = (d^) <$> Just 3

И сообщение об ошибке:

No instance for (RealFloat Int) arising from an operator section
      In the first argument of ‘(<$>)’, namely ‘(d ^)’
      In the expression: (d ^) <$> Just 3
      In an equation for ‘compl’: compl d = (d ^) <$> Just 3

Есть ли способ обойти это?Разрешение этого типа быть плавающим не имеет никакого смысла в моей программе.

1 Ответ

0 голосов
/ 24 июня 2018

(^) - это метод Num. Тип экземпляра Complex Num объявлен как:

instance RealFloat a => Num (Complex a)

То есть вы не можете трактовать Complex a как Num, если a не является RealFloat, а Int - нет. Вместо этого используйте Complex Double или подобное.

...