2012-03-15 2 views
2

Я использую GHCi, как мой переводчик,Тип недобросовестный в GHCI

Спецификации для моего назначения должны иметь список кортежей Int s т.е.

[(Int,Int)] 

, когда я печатаю

let edges = [(0,2),(0,3),(1,2),(2,3)] 

GHCi автоматически делает числовые типы Integer вместо Int, поэтому я не могу проверить свою программу, то есть

:t edges 
edges :: [(Integer,Integer)] 

Как я могу заставить такое определение использовать Int, а не Integer ??

Спасибо!

+0

Вы имеете в виду GHCi, а не hgci, perchance? –

+0

Ссылки по теме: http://www.haskell.org/ghc/docs/7.0.4/html/users_guide/interactive-evaluation.html#extended-default-rules и http://www.haskell.org/onlinereport/ decls.html # sect4.3.4 – ivanm

+0

Tokhon Jelvis дал вам ответ ... но если возможно, вы должны изменить свою программу, чтобы использовать 'Integer' вместо' Int' вам нужно. «Int» имеет слабо определенную семантику и приводит к тонким ошибкам и проблемам масштабируемости. Если он не находится в критическом цикле производительности, используйте 'Integer' –

ответ

7

Вы можете указать тип, если ввести его как это:

let edges = [(0,2),(0,3),(1,2),(2,3)] :: [(Int, Int)] 
1

Также вы можете использовать так, как вы обычно указать типы для функций в программах, но вы должны соответствовать оба выражения в одной и той же команды интерпретатора

>let edges :: [(Int, Int)]; edges = [(0,2),(0,3),(1,2),(2,3)] 
>:t edges 
    edges :: [(Int, Int)] 
Смежные вопросы