标签: stuarray

如何创建未装箱的可变数组实例

假设我有以下类型:

data MyType = Constructor0 | Constructor1 | Constructor2
            deriving (Eq,Show,Enum)

MArray (STUArray s) MyType (ST s)
MArray IOUarray MyType IO

目前我将所有内容存储为Word8,然后使用(包装)fromEnum/toEnum进行转换,但感觉不对.我需要严格和拆箱,因为我在内存中使用大型数据结构(> 1.2Go),我无法懒得加载它.如果我找不到任何解决方案,我将重新实现C++中的所有内容,我希望避免使用当前项目.

我已经问了#haskell的问题,但我没有得到回复,也许这不是当天的好时机.

haskell marray stuarray

10
推荐指数
1
解决办法
1549
查看次数

具有多态类型的STUArray

我想使用STmonad和STUArrays 实现一个算法,我希望它能够同时使用FloatDouble数据.

我将演示一个更简单的示例问题:计算memoized scanl (+) 0(我知道它可以解决STUArray,只是使用例子).

{-# LANGUAGE FlexibleContexts, ScopedTypeVariables #-}

import Control.Monad
import Control.Monad.ST
import Data.Array.Unboxed
import Data.Array.ST

accumST :: forall a. (IArray UArray a, Num a) => [a] -> Int -> a
accumST vals = (!) . runSTUArray $ do
  arr <- newArray (0, length vals) 0 :: ST s (STUArray s Int a)
  forM_ (zip vals [1 .. length vals]) $ \(val, i) ->
    readArray arr …
Run Code Online (Sandbox Code Playgroud)

haskell typeclass stuarray

7
推荐指数
1
解决办法
854
查看次数

重新讨论具有约束种类的多态STUArrays

我想在得分类型中实现动态编程算法多态; 这是一个没有边界条件的简化1D版本:

{-# LANGUAGE ConstraintKinds, FlexibleContexts, RankNTypes, ScopedTypeVariables #-}

import Control.Monad
import Control.Monad.ST.Strict
import Data.Array.ST
import Data.Array.Unboxed

dynamicProgrammingSTU
  :: forall e i . (
    IArray UArray e,
    forall s. MArray (STUArray s) e (ST s),
    Ix i
  )
  => (forall m . Monad m => (i -> m e) -> (i -> m e))
  -> (i, i)
  -> (i -> e)
dynamicProgrammingSTU prog bnds = (arr !) where
  arr :: UArray i e
  arr = runSTUArray resultArrayST

  resultArrayST :: forall …
Run Code Online (Sandbox Code Playgroud)

haskell marray stuarray constraint-kinds

6
推荐指数
1
解决办法
190
查看次数

标签 统计

haskell ×3

stuarray ×3

marray ×2

constraint-kinds ×1

typeclass ×1