T>>Ты, видимо, просто играешься с Хаскелем. N>Я серьёзные вещи на нем тоже пишу. Но поиграться иногда тоже хочется.
Вопросы странные. Вне какой-либо логики. Висящие в воздухе.
Что-то наподобие "и православие, и католицизм имеют постулатом триединство бога, но при этом православие признает за богом возможность нарушения законов логики, а католицизм нет. Что по этому поводу говорят писания апостолов?"
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Здравствуйте, nikov, Вы писали:
N>Кто прав и в каком разделе haskell report это разъясняется?
Сложно сказать, кто прав, ибо в GHC всякие расширения популярные. Но не в соответствии с haskell report.
instance для этого чуда вполне себе пишется:
{-# OPTIONS -fglasgow-exts #-}module Test where
class A a where
foo :: A (b d) => a (c b)
data Some a = Some
data B a d = B
data C (b :: * -> * -> *) = C -- kind * -> * -> *instance A Some where
foo = Some
instance A (B a) where
foo = B
test :: Some (C B)
test = foo
В haskell report, думаю, по поводу kind'ов ничего нет, так что в соответствии с ним прав Hugs.
Здравствуйте, VoidEx, Вы писали:
VE>В haskell report, думаю, по поводу kind'ов ничего нет, так что в соответствии с ним прав Hugs.
Вру, почитал.
Вот это и без расширений работает в GHC:
class A a where
foo :: A (b d) => a (c b)
data Some a = Some
data B a d = B
data C b = C | C2 (b Int Float)
instance A Some where
foo = Some
instance A (B a) where
foo = B
test :: Some (C B)
test = foo
Кажется, нашел. 4.1.3 Syntax of Class Assertions and Contexts
In general, we use cx to denote a context and we write cx => t to indicate the type restricted by the context cx. The context cx must only contain type variables referenced in t.
В моем примере d не встречается справа от =>, поэтому данное правило нарушается. Значит, GHC формально не прав.