[Haskell] Type classes "Ambiguous type variable"
От: Дмитрий Украина  
Дата: 05.11.12 21:24
Оценка:
Доброго времени суток,

Читал я тут про Функциональный калькулятор, хотел что-то похожее реализовать, но вот что заметил:
--Test.hs
class Num' a where
    fromInt :: Int -> a
n0 :: Num' a => a
n0 = fromInt 0

--ghci:
*Test> :t 0
0 :: Num a => a
*Test> :t n0
n0 :: Num' a => a
*Test> const "wtf" 0
"wtf"
*Test> const "wtf" n0

<interactive>:17:13:
    Ambiguous type variable `b0' in the constraint:
      (Num' b0) arising from a use of `n0'
    Probable fix: add a type signature that fixes these type variable(s)
    In the second argument of `const', namely `n0'
    In the expression: const "wtf" n0
    In an equation for `it': it = const "wtf" n0
*Test>


Почему он на ноль не ругается, а на мой класс ругается, у него ведь для нуля тоже Ambiguity — типы выглядят одинаково?
Он что для класса Num имеет какой-то дефолтный инстанс?

Помогите, пожалуйста.
Большое спасибо
Re: [Haskell] Type classes "Ambiguous type variable"
От: Курилка Россия http://kirya.narod.ru/
Дата: 05.11.12 21:30
Оценка: 3 (1)
Здравствуйте, Дмитрий, Вы писали:

Д>Почему он на ноль не ругается, а на мой класс ругается, у него ведь для нуля тоже Ambiguity — типы выглядят одинаково?

Д>Он что для класса Num имеет какой-то дефолтный инстанс?

См. раздел 4.3.4 The Haskell 98 Report
Re[2]: [Haskell] Type classes "Ambiguous type variable"
От: Дмитрий Украина  
Дата: 05.11.12 21:38
Оценка:
Здравствуйте, Курилка, Вы писали:

К>См. раздел 4.3.4 The Haskell 98 Report


Большое спасибо за быстрый ответ в точку!
Похоже надо за стандарт заседать...
Re[2]: [Haskell] Type classes "Ambiguous type variable"
От: Дмитрий Украина  
Дата: 05.11.12 21:54
Оценка:
Здравствуйте, Курилка, Вы писали:

К>См. раздел 4.3.4 The Haskell 98 Report


Простите, что-то не получается, а можно пример кода?
я писал так:
module Test where

default (Int)

class Num' a where
    fromInt :: Int -> a

instance Num' Int where
    fromInt = id

n0 :: Num' a => a
n0 = fromInt 0


Короче я везде вставлял
default (Int)
, но не помогало.

Помогите пожалуйста.
Re[3]: [Haskell] Type classes "Ambiguous type variable"
От: Курилка Россия http://kirya.narod.ru/
Дата: 06.11.12 04:47
Оценка:
Здравствуйте, Дмитрий, Вы писали:

Д>Здравствуйте, Курилка, Вы писали:


К>>См. раздел 4.3.4 The Haskell 98 Report


Д>Простите, что-то не получается, а можно пример кода?

Д>Помогите пожалуйста.

А можно пояснить, что именно хочется получить-то?
Почему приведённое не работает — см. пункты после "is defaultable if".
Re[4]: [Haskell] Type classes "Ambiguous type variable"
От: Дмитрий Украина  
Дата: 06.11.12 08:38
Оценка:
Здравствуйте, Курилка, Вы писали:

К>А можно пояснить, что именно хочется получить-то?

К>Почему приведённое не работает — см. пункты после "is defaultable if".

Сутра проснулся и все понял: я хотел для своего типа указать дефолтный инстанс, но как я понял, default указывает только для Num (я еще и подумал кака запись default (Int) узнает какой я класс хочу).

Я ведь прав? дефолтный инстанс можно только для Num?
Re[5]: [Haskell] Type classes "Ambiguous type variable"
От: Курилка Россия http://kirya.narod.ru/
Дата: 06.11.12 08:53
Оценка: 6 (1)
Здравствуйте, Дмитрий, Вы писали:

Д>Сутра проснулся и все понял: я хотел для своего типа указать дефолтный инстанс, но как я понял, default указывает только для Num (я еще и подумал кака запись default (Int) узнает какой я класс хочу).


Д>Я ведь прав? дефолтный инстанс можно только для Num?


В рамках текущего GHC — Num с расширением для strings, для Haskell' есть предложения по более общему решению
?
Re[6]: [Haskell] Type classes "Ambiguous type variable"
От: Дмитрий Украина  
Дата: 06.11.12 09:50
Оценка:
Здравствуйте, Курилка, Вы писали:

К>В рамках текущего GHC — Num с расширением для strings, для Haskell' есть предложения по более общему решению


Спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.