【问题标题】:Converting a list to `IO (IOArray Int a)` in Haskell在 Haskell 中将列表转换为“IO (IOArray Int a)”
【发布时间】:2020-06-11 01:30:02
【问题描述】:

我需要编写一个函数来获取a 的列表并返回IO (IOArray Int a)

listToArray :: [a] -> IO (IOArray Int a)

我需要一些帮助才能开始使用 IO 数组。我通过newListArray 创建了一个新的,但似乎我必须提交特定类型,并且我的函数需要使用任何类型a

感谢您的帮助!

【问题讨论】:

    标签: arrays haskell types io


    【解决方案1】:

    如果你想使用任何类型,你可以看看这个类型签名

    newListArray :: (MArray a e m, Ix i) => (i, i) -> [e] -> m (a i e) 
    

    mIOaIOArrayiInt

    这需要数组的开始和结束索引。详细可以看这里:http://hackage.haskell.org/package/array-0.5.4.0/docs/Data-Array-MArray.html#v:newListArray

    【讨论】:

    • 谢谢!现在我有代码编译。顺便说一句,我如何显示 IOArray 的内容?
    • @GilShafriri 你大概可以用这个getElems:hackage.haskell.org/package/array-0.5.4.0/docs/…我建议学习在hackage中导航,当你习惯它时,你将能够知道使用哪个函数。跨度>
    • 问题是他们没有给出任何例子。我意识到我必须使用
    • @GilShafriri 你没有将IO (IOArray Int a) 类型值"convert" 转换为IOArray Int a 类型值;你“绘制/保持”一个IOArray Int a类型值来自IO (IOArray Int a)类型值表示的I/O计算。当该计算将运行时,您的 arr 变量(例如,在 arr <- ... 行中)将绑定到由该不纯 I/O 计算生成/计算/生成的 IOArray Int a 类型的实际纯值。
    • @GilShafriri 或者您可以停止使用array 包的这种糟糕界面来折磨自己,并使用vectormassiv 之类的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    相关资源
    最近更新 更多