在使用IORef编写双向链表代码时,我遇到了以下问题。 首先,我创建了一个可变的队列数据类型,其中包含前队列和后端的链接
data Tree a = T { prev::IORef (Tree a), next::IORef (Tree a), val::a } | Empty
data Queue a = Q { front::IORef (Tree a), back::IORef (Tree a) }
e <- newIORef Empty
q = Q e e
然后我尝试推送Int值,但我不能。
t = T e e (1::Int)
返回
λ: :t T e e (1::Int)
<interactive>:1:3: error:
• Couldn't match type ‘GHC.Prim.Any’ with ‘Int’
Expected type: IORef (Tree Int)
Actual type: IORef (Tree GHC.Prim.Any)
• In the first argument of ‘T’, namely ‘e’
In the expression: T e e (1 :: Int)
λ:
看起来Empty有一个类型&#34; GHC.Prim.Any ...它与其他传统类型不匹配。有没有办法创建匹配其他任何东西的Empty类型?