创建引用时Haskell中的类型错误
我正在做家庭作业,有些事情让我卡住了创建引用时Haskell中的类型错误,haskell,Haskell,我正在做家庭作业,有些事情让我卡住了 > data Channel a = Chan { cap :: Int > , queue :: [a] } > data FiniteChan a = IORef (Channel a) > newFiniteChan :: Int -> IO (FiniteChan a) > newFiniteChan capacity = do x <- newIORe
> 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
我花了很多时间来解决这个问题,但找不到答案。非常感谢您的帮助。您必须向FiniteChan数据类型添加构造函数,或将其转换为类型别名指令,这将编译:
import Data.IORef
data Channel a = Chan { cap :: Int
, queue :: [a] }
data FiniteChan a = FiniteChan (IORef (Channel a))
newFiniteChan :: Int -> IO (FiniteChan a)
newFiniteChan capacity = do
x <- newIORef (Chan {cap = capacity, queue = []})
return $ FiniteChan x
import Data.IORef
数据通道a=Chan{cap::Int
,队列::[a]}
数据FiniteChan a=FiniteChan(IORef(通道a))
newFiniteChan::Int->IO(FiniteChan a)
newFiniteChan容量=do
xdata FiniteChan a=IORef(通道a)
使用构造函数声明一个新类型IORef
。我怀疑您想将其更改为类型FiniteChan a=…
。(这将解决类型错误,是否是您真正想要的是另一个问题,但看起来是这样的。)
import Data.IORef
data Channel a = Chan { cap :: Int
, queue :: [a] }
data FiniteChan a = FiniteChan (IORef (Channel a))
newFiniteChan :: Int -> IO (FiniteChan a)
newFiniteChan capacity = do
x <- newIORef (Chan {cap = capacity, queue = []})
return $ FiniteChan x