如何创建一个类似于“ Data.Vector.modify”的函数来接收列表?

玛雅·维克多

Data.Vector具有以下功能:

modify :: (forall s. MVector s a -> ST s ()) -> Vector a -> Vector a

是否可以创建一个函数,例如:

modify :: [(forall s. MVector s a -> ST s ())] -> Vector a -> Vector a

我试过了

{-# LANGUAGE RankNTypes, ImpredicativeTypes #-}

import qualified Data.Vector.Mutable as MV
import qualified Data.Vector as V
import Control.Monad.ST
import Control.Monad.Primitive

unsafeModify :: [(forall s . MV.MVector s Int -> ST s ())] -> V.Vector Int -> V.Vector Int
unsafeModify mods vec = runST $ do
    mvec <- V.unsafeThaw vec
    sequence_ (map ($ mvec) mods)
    V.unsafeFreeze mvec

但是我得到了错误

Muts.hs:11:28:
    Couldn't match type ‘forall s1. V.MVector s1 Int -> ST s1 ()’
                  with ‘V.MVector s Int -> ST s a0’
    Expected type: [V.MVector s Int -> ST s a0]
      Actual type: [forall s. V.MVector s Int -> ST s ()]
    Relevant bindings include
      mvec :: V.MVector s Int (bound at Muts.hs:10:5)
    In the second argument of ‘map’, namely ‘mods’
    In the first argument of ‘sequence’, namely ‘(map ($ mvec) mods)’
泽塔

更改的类型unsafeModify特别是,将其浮动forall s.在列表外部。您希望所有函数共享同一个状态标记(由决定runST),因此您不必让每个函数都可能使用另一个 s

{-# LANGUAGE RankNTypes #-}

import qualified Data.Vector.Mutable as MV
import qualified Data.Vector as V
import Control.Monad (mapM_)
import Control.Monad.ST
import Control.Monad.Primitive

unsafeModify :: (forall s . [MV.MVector s Int -> ST s ()]) -> V.Vector Int -> V.Vector Int
unsafeModify mods vec = runST $ do
    mvec <- V.unsafeThaw vec
    mapM_ ($ mvec) mods
    V.unsafeFreeze mvec

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

需要编写一个函数来接收颜色列表,并输出它们的负色(来自字典的对)

来自分类Dev

创建一个函数来接收 R 中的数据框名称和列

来自分类Dev

定义一个函数来接受特定的列表参数

来自分类Dev

使用行为类似于 CardAction 的 AdaptativeCard 创建一个按钮列表?

来自分类Dev

如何使一个函数不使用STL容器参数(类似于空指针)?

来自分类Dev

是否有一个numpy函数来生成类似于R的seq函数的序列?

来自分类Dev

如何在 Python 中将列表 [a,b] 转换为 [[a],[b]]?一个类似于 map 的单行函数

来自分类Dev

您是否可以创建一个使用前缀和后缀调用的R函数(类似于方括号)?

来自分类Dev

创建一个类似jQuery的函数

来自分类Dev

Data.Vector.modify在每次迭代时创建矢量副本

来自分类Dev

Data.Vector.modify在每次迭代时创建矢量副本

来自分类Dev

iOS 如何制作一个函数来接受向 NSCoding 确认的参数

来自分类Dev

如何制作一个可以将任何类似于javascript代码的字符串转换为对象的函数?

来自分类Dev

如何在R中编写一个函数(类似于SAS宏)以导入和格式化Excel文件列表?

来自分类Dev

创建一个函数来接受一个二维数组并返回一个显示所有键:值的对象

来自分类Dev

是否有一个本机分组函数,其功能类似于sortWith函数?

来自分类Dev

是否有一个类似于STL的函数用索引的某些函数填充数组?

来自分类Dev

PYTHON:有一个类似于ast.literal_eval()的函数吗?

来自分类Dev

以pythonic方式编写多个for循环(包括一个类似于sum()函数的循环)

来自分类Dev

是否有一个类似于php include()的Android函数

来自分类Dev

TypeScript:需要类似于 ReturnType<...> 的东西,但对于第一个函数参数的类型

来自分类Dev

制作一个 findMax() 函数,类似于 Math.max()

来自分类Dev

AS3:创建一个将Array和Vector都接受为参数的函数

来自分类Dev

如何创建一个函数来计算年份?

来自分类Dev

如何创建一个函数来选择特定的数组?

来自分类Dev

是否有基本的R函数来动态排序data.frame列,类似于dplyr everything()?

来自分类Dev

根据一个或多个data.frame值创建一个子集函数

来自分类Dev

创建一个c_vector

来自分类Dev

在Haskell中创建可变的Data.Vector

Related 相关文章

  1. 1

    需要编写一个函数来接收颜色列表,并输出它们的负色(来自字典的对)

  2. 2

    创建一个函数来接收 R 中的数据框名称和列

  3. 3

    定义一个函数来接受特定的列表参数

  4. 4

    使用行为类似于 CardAction 的 AdaptativeCard 创建一个按钮列表?

  5. 5

    如何使一个函数不使用STL容器参数(类似于空指针)?

  6. 6

    是否有一个numpy函数来生成类似于R的seq函数的序列?

  7. 7

    如何在 Python 中将列表 [a,b] 转换为 [[a],[b]]?一个类似于 map 的单行函数

  8. 8

    您是否可以创建一个使用前缀和后缀调用的R函数(类似于方括号)?

  9. 9

    创建一个类似jQuery的函数

  10. 10

    Data.Vector.modify在每次迭代时创建矢量副本

  11. 11

    Data.Vector.modify在每次迭代时创建矢量副本

  12. 12

    iOS 如何制作一个函数来接受向 NSCoding 确认的参数

  13. 13

    如何制作一个可以将任何类似于javascript代码的字符串转换为对象的函数?

  14. 14

    如何在R中编写一个函数(类似于SAS宏)以导入和格式化Excel文件列表?

  15. 15

    创建一个函数来接受一个二维数组并返回一个显示所有键:值的对象

  16. 16

    是否有一个本机分组函数,其功能类似于sortWith函数?

  17. 17

    是否有一个类似于STL的函数用索引的某些函数填充数组?

  18. 18

    PYTHON:有一个类似于ast.literal_eval()的函数吗?

  19. 19

    以pythonic方式编写多个for循环(包括一个类似于sum()函数的循环)

  20. 20

    是否有一个类似于php include()的Android函数

  21. 21

    TypeScript:需要类似于 ReturnType<...> 的东西,但对于第一个函数参数的类型

  22. 22

    制作一个 findMax() 函数,类似于 Math.max()

  23. 23

    AS3:创建一个将Array和Vector都接受为参数的函数

  24. 24

    如何创建一个函数来计算年份?

  25. 25

    如何创建一个函数来选择特定的数组?

  26. 26

    是否有基本的R函数来动态排序data.frame列,类似于dplyr everything()?

  27. 27

    根据一个或多个data.frame值创建一个子集函数

  28. 28

    创建一个c_vector

  29. 29

    在Haskell中创建可变的Data.Vector

热门标签

归档