【发布时间】:2020-06-11 01:30:02
【问题描述】:
我需要编写一个函数来获取a 的列表并返回IO (IOArray Int a)
listToArray :: [a] -> IO (IOArray Int a)
我需要一些帮助才能开始使用 IO 数组。我通过newListArray 创建了一个新的,但似乎我必须提交特定类型,并且我的函数需要使用任何类型a。
感谢您的帮助!
【问题讨论】:
我需要编写一个函数来获取a 的列表并返回IO (IOArray Int a)
listToArray :: [a] -> IO (IOArray Int a)
我需要一些帮助才能开始使用 IO 数组。我通过newListArray 创建了一个新的,但似乎我必须提交特定类型,并且我的函数需要使用任何类型a。
感谢您的帮助!
【问题讨论】:
如果你想使用任何类型,你可以看看这个类型签名
newListArray :: (MArray a e m, Ix i) => (i, i) -> [e] -> m (a i e)
m 是 IO,a 是 IOArray,i 是 Int。
这需要数组的开始和结束索引。详细可以看这里:http://hackage.haskell.org/package/array-0.5.4.0/docs/Data-Array-MArray.html#v:newListArray
【讨论】:
getElems:hackage.haskell.org/package/array-0.5.4.0/docs/…我建议学习在hackage中导航,当你习惯它时,你将能够知道使用哪个函数。跨度>
IO (IOArray Int a) 类型值"convert" 转换为IOArray Int a 类型值;你“绘制/保持”一个IOArray Int a类型值来自由IO (IOArray Int a)类型值表示的I/O计算。当该计算将运行时,您的 arr 变量(例如,在 arr <- ... 行中)将绑定到由该不纯 I/O 计算生成/计算/生成的 IOArray Int a 类型的实际纯值。
array 包的这种糟糕界面来折磨自己,并使用vector 或massiv 之类的东西