创建引用时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

x
data 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