Я пытаюсь выяснить, когда мои параметры типа будут в области видимости. У меня есть два идентичных примера, но один не работает.
{-# LANGUAGE ScopedTypeVariables #-}
class IntegerAsType a where
value :: a -> Integer
class BaseRing a where
primroot :: a -> Integer -> a
newtype Zq q = Zq Integer deriving (Eq)
instance (IntegerAsType q) => Num (Zq q) where
...
negate (Zq x) = Zq ((value (undefined :: q)) - x) --THIS WORKS
instance (IntegerAsType q) => BaseRing (Zq q) where
primroot = (xyz::(Zq q)) m = (value q)+m --(as an example), DOES NOT WORK
В чем разница между этими двумя экземплярами (почему один работает, а другой не работает)?
Я ссылаюсь на предыдущий пост , где было предложено поместить тип в параметр функции. Раньше это работало, но в этом случае пропущенный явный тип аргумента выдает мне ту же ошибку:
Not in scope 'q'
Спасибо