Когда вы используете GeneralizedNewtypeDeriving
, вам все равно нужно указать, какие экземпляры вы хотите «позаимствовать» из упакованного типа в предложении deriving
, поэтому вы определяете Goat
введите с помощью:
newtype Goats = Goats Int deriving (Eq, Show<b>, TooMany</b>)
Обратите внимание, что, как и @ RobinZigmond говорит , вам необходимо определить прагмы вверху файла, поэтому:
{-# LANGUAGE <b>GeneralizedNewtypeDeriving</b> #-}
module Practice where
class TooMany a where
tooMany :: a -> Bool
instance TooMany Int where
tooMany n = n > 42
newtype Goats = Goats Int deriving (Eq, Show, TooMany)
В GHCi мы можем запросить, например:
*Practice> tooMany (Goats 12)
False
Хотя я проводил этот эксперимент на машине Linux, я был бы очень удивлен, что это не работает на другой платформе , Тем более что такие языковые расширения не имеют ничего общего с платформой, на которой они работают. Языковые расширения обычно не зависят от платформы, поэтому, как @ DanielWagner говорит , добавление класса типов в deriving
должно быть сделано на всех платформах.