Не удается создать производный экземпляр Num

Я использую ghci, этот раздел кода

newtype Gold = Gold Int
    deriving (Eq, Ord, Show, Num)

показывает ошибку как

Can't make a derived instance of 'Num Gold':
  'Num' is not a derivable class
  Try GeneralizedNewTypeDeriving for GHC's newtype-deriving extension in the newtype declaration for 'Gold'

Пожалуйста, предложите решение.


person Ammlan Ghosh    schedule 01.09.2014    source источник
comment
Как сказано в сообщении об ошибке GHC: добавьте {-# LANGUAGE GeneralizedNewtypeDeriving #-} в начало файла.   -  person leftaroundabout    schedule 01.09.2014
comment
@BartekBanachewicz Я думаю, что ОП не знал, как включать расширения, отсюда и вопрос.   -  person AndrewC    schedule 01.09.2014


Ответы (1)


Вы можете автоматически получить только Eq, Ord, Enum, Bounded, Show и Read. Чтобы получить другие экземпляры, вам нужно включить расширение GeneralizedNewtypeDeriving, как предлагает GHCi:

{-# LANGUAGE GeneralizedNewtypeDeriving #-}

newtype Gold = Gold Int
  deriving (Eq, Ord, Show, Num)

Обратите внимание, что {-# ... #-} — это не комментарий, а прагма компилятора, в этом случай включения данного языкового расширения.

person MathematicalOrchid    schedule 01.09.2014
comment
Сообщение об ошибке показывает: Не удается создать производный экземпляр «Num Gold»: Num не является производным классом. Попробуйте GeneralizedNewtypeDeriving для расширения GHC для получения нового типа. - person Ammlan Ghosh; 01.09.2014
comment
Спасибо @MathematicalOrchid. Я очень новичок в Haskell. На самом деле я не включил строку {-# LANGUAGE GeneralizedNewTypeDeriving #-}. - person Ammlan Ghosh; 01.09.2014
comment
@milleniumbug Не нужно грубить. ОП можно простить за то, что он подумал, что это комментарий, учитывая синтаксис. - person AndrewC; 01.09.2014