我正在做我的家庭作业,但我遇到了一些事情。
> data Channel a = Chan { cap :: Int
> , queue :: [a] }
> data FiniteChan a = IORef (Channel a)
> newFiniteChan :: Int -> IO (FiniteChan a)
> newFiniteChan capacity = do x <- newIORef (Chan {cap = capacity, queue = []})
> return x
基本上,我想创建一个对Channel a
何时调用 newFiniteChan 的引用,并且我想FiniteChan a
指的是该引用(我不能更改 newFiniteChan 的签名)。当我编译这个时,我得到以下错误:
final.lhs:235:38:
Couldn't match expected type `FiniteChan a'
with actual type `IORef (Channel a0)'
In the first argument of `return', namely `x'
In a stmt of a 'do' block: return x
In the expression:
do { x <- newIORef (Chan {cap = capacity, queue = []});
return x }
我花了很多时间来解决问题,但我找不到。我很感激任何帮助。