问题标签 [stuarray]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - 如何创建未装箱的可变数组实例
假设我有以下类型:
有没有办法创建这样的实例之一:
目前我将所有内容存储为 Word8,并使用(包装)fromEnum/toEnum 进行转换,但感觉不对。我需要严格和拆箱,因为我在内存中使用了一个大型数据结构(>1.2Go),我不能懒惰地加载它。如果我找不到任何解决方案,我将在 C++ 中重新实现所有内容,我希望在我当前的项目中避免这样做。
我已经在#haskell 上提出了这个问题,但没有得到回复,也许现在不是提问的好时机。
haskell - "Could not deduce (MArray (STUArray s) Int (ST s)) from context ()" when applying runST
I'm in the process of learning haskell and came across this problem:
Using Glasgow Haskell Compiler, Version 6.10.4, for Haskell 98, stage 2 booted by GHC version 6.10.1
Common beginning of the file
Using STArray (works)
Using STUArray (doesn't work)
But when I try to switch to unboxed arrays, I get an error message.
Error messages
and also:
After almost two hours of fiddling with the type annotations I hope someone can point me in the right direction. What on earth is going wrong?
Thank you for your time.
haskell - 具有多态类型的 STUArray
我想使用ST
monad 和STUArray
s 实现一个算法,并且我希望它能够同时处理Float
和Double
数据。
我将演示一个更简单的示例问题:计算一个 memoized scanl (+) 0
(我知道它可以在没有 的情况下解决STUArray
,仅用作示例)。
这失败了:
我无法应用建议的“可能修复”。因为我需要(forall s. MArray (STUArray s) a (ST s))
在上下文中添加类似的东西,但是这是不可能的..
haskell - 重新审视具有约束类型的多态 STUArray
我想实现一个分数类型的动态规划算法多态;这是一个没有边界条件的简化一维版本:
约束不起作用;
总结一下,Could not deduce (MArray (STUArray s) e (ST s)) from the context forall s. MArray (STUArray s) e (ST s i)
。请注意,将约束添加到resultArrayST
只是将问题推到runSTUArray
.
我目前知道四个有缺陷的解决方案:
- 避免 boxed
STArray
s 或简单的 non-monadicArray
s 的问题,也许使用seq
和 bang 模式来缓解由此产生的内存问题。 unsafeFreeze
用and打破类型系统,unsafePerformIO
该死的约束MArray IOUArray e IO
工作正常。- 此解决方案使用类型类并为每个“不可装箱”类型编写实例来解决类似问题。
- 这个使用 GHC 重写规则为每种类型(和通用
STArray
版本)选择不同的功能。
但是,我问这个问题是希望像现代语言扩展这样ConstraintKinds
可以让我表达我的原始代码的意图forall s. MArray (STUArray s) e (ST s)
。