为什么不能使用hashUnique的Int值?

时间:2011-06-10 03:17:25

标签: haskell monads

我想将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 个答案:

答案 0 :(得分:1)

cnter是一个返回Int的IO操作。也就是说,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]

或者用符号表示:

main = do c <- cnter
          print [c]

但是我不确定你为什么要构建一个列表来打印它,我只是print c,个人:

main = cnter >>= print