Почему нельзя использовать значение Int из hashUnique? - PullRequest
0 голосов
/ 10 июня 2011

Я хочу сохранить значение, возвращенное из hashUnique, в список, но я не могу этого сделать:

import Data.Unique
import Data.List as L

cnter = do
   u <- newUnique
   return (hashUnique u)

main = cnter:[]

Это выдаст сообщение об ошибке: No instance for (Show (IO Int)), arising from a use of 'print' at <interative>

1 Ответ

1 голос
/ 10 июня 2011

cnter - это действие ввода-вывода, которое возвращает Int. То есть cnter имеет тип IO Int. Вы пытаетесь использовать его как Int. Что вы действительно хотите - это выполнить действие, получив Int, а затем использовать этот результат:

import Data.Unique
import Data.List as L

cnter = do
   u <- newUnique
   return (hashUnique u)

main = cnter >>= \c -> print [c]

Или с пометкой do:

main = do c <- cnter
          print [c]

Но я не уверен, почему вы хотите составить список просто для его печати, я бы просто print c лично:

main = cnter >>= print
...