Переменные ScopedType иногда находятся в области видимости, иногда нет - PullRequest
1 голос
/ 05 октября 2011

Я пытаюсь выяснить, когда мои параметры типа будут в области видимости. У меня есть два идентичных примера, но один не работает.

{-# 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'

Спасибо

1 Ответ

2 голосов
/ 05 октября 2011

q - это переменная типа, а не обычная переменная. Вот почему value (undefined :: q) работает, а value q - нет.

...