[Haskell] Что может содержать context?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 31.05.09 07:20
Оценка:
Есть такой достаточно патологический код:

class A a where
  foo :: A (b d) => a (c b)


GHC его успешно компилирует, а Hugs выдает ошибку: Illegal type in class constraint.

Ambiguous type signature in class declaration
*** ambiguous type : (A a, A (b c)) => a (d b)
*** assigned to    : foo


Кто прав и в каком разделе haskell report это разъясняется?
Re: [Haskell] Что может содержать context?
От: thesz Россия http://thesz.livejournal.com
Дата: 31.05.09 09:01
Оценка:
N>Кто прав и в каком разделе haskell report это разъясняется?

Ты, видимо, просто играешься с Хаскелем.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[2]: [Haskell] Что может содержать context?
От: WolfHound  
Дата: 31.05.09 10:04
Оценка: :)
Здравствуйте, thesz, Вы писали:

T>Ты, видимо, просто играешься с Хаскелем.

Он просто идеальный тестер
Автор(ы): Антон Злыгостев aka Sinclair
Дата: 24.06.2004
Этот четверг ничем не отличался от обычных. Часов с 12 я начал испытывать просто нестерпимое желание найти повод поотлынивать. Поэтому когда в аське всплыл вопрос шефа "Не хочешь пособеседовать тестеров?", я долго не думал...
.
Его обычное состояние заваливать багрепортами авторов всего к чему прикасается.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: [Haskell] Что может содержать context?
От: VoidEx  
Дата: 31.05.09 10:49
Оценка:
Здравствуйте, 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.
Re[2]: [Haskell] Что может содержать context?
От: VoidEx  
Дата: 31.05.09 11:03
Оценка:
Здравствуйте, 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
Re[2]: [Haskell] Что может содержать context?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 31.05.09 11:29
Оценка:
Здравствуйте, thesz, Вы писали:

T>Ты, видимо, просто играешься с Хаскелем.


Я серьёзные вещи на нем тоже пишу. Но поиграться иногда тоже хочется.
Re[3]: [Haskell] Что может содержать context?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 31.05.09 11:46
Оценка:
Здравствуйте, VoidEx, Вы писали:

VE>Вру, почитал.


Кажется, нашел. 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 формально не прав.
Re[3]: [Haskell] Что может содержать context?
От: thesz Россия http://thesz.livejournal.com
Дата: 31.05.09 12:25
Оценка: :)
T>>Ты, видимо, просто играешься с Хаскелем.
N>Я серьёзные вещи на нем тоже пишу. Но поиграться иногда тоже хочется.

Вопросы странные. Вне какой-либо логики. Висящие в воздухе.

Что-то наподобие "и православие, и католицизм имеют постулатом триединство бога, но при этом православие признает за богом возможность нарушения законов логики, а католицизм нет. Что по этому поводу говорят писания апостолов?"
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[3]: [Haskell] Что может содержать context?
От: thesz Россия http://thesz.livejournal.com
Дата: 31.05.09 12:28
Оценка:
T>>Ты, видимо, просто играешься с Хаскелем.
WH>Он просто идеальный тестер
Автор(ы): Антон Злыгостев aka Sinclair
Дата: 24.06.2004
Этот четверг ничем не отличался от обычных. Часов с 12 я начал испытывать просто нестерпимое желание найти повод поотлынивать. Поэтому когда в аське всплыл вопрос шефа "Не хочешь пособеседовать тестеров?", я долго не думал...
.


Куль!
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.