Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 在ByteString或Text上是否有一元/应用映射(即遍历/映射)函数?_Haskell_Text_Map_Traversal_Bytestring - Fatal编程技术网

Haskell 在ByteString或Text上是否有一元/应用映射(即遍历/映射)函数?

Haskell 在ByteString或Text上是否有一元/应用映射(即遍历/映射)函数?,haskell,text,map,traversal,bytestring,Haskell,Text,Map,Traversal,Bytestring,和有标准(纯)映射函数: 但我错过了他们的一元/应用对应: traverse :: (Applicative f) => (Word8 -> f Word8) -> ByteString -> f ByteString traverse :: (Applicative f) => (Char -> f Char) -> Text -> f Text (如果我们有遍历我们可以定义mapM f=unwrapMonad.traverse(WrapMon

和有标准(纯)映射函数:

但我错过了他们的一元/应用对应:

traverse :: (Applicative f) => (Word8 -> f Word8) -> ByteString -> f ByteString
traverse :: (Applicative f) => (Char -> f Char) -> Text -> f Text
(如果我们有
遍历
我们可以定义
mapM f=unwrapMonad.traverse(WrapMonad.f)


我试着翻看包裹,试着胡说八道,但没找到。我忽略了什么吗?或者,它们丢失的原因是什么(比如不可能/不容易有效地定义它们)?

顺便说一句,您在Edward Kmett的软件包中正好有您需要的东西;所需的
遍历
版本只是
数据.Bytestring.Lens.bytes
数据.Text.Lens.Text


编辑:为了澄清,上述函数是
SimpleTraversal c e
类型的(泛化)函数(分别用于
(c~Bytestring,e~Word8)
(c~Text,e~Char)
,是所有f的
类型同义词。(Applicative f)=>(e->f e)->c->f c

出于好奇,你需要它们做什么?不是这两个包的作者,我猜这些定义会很难看。这似乎涉及很多交错
unsafePerformIO
@MikhailGlushenkov我正在尝试对包进行一些增强。特别是,一元/应用程序遍历元素。当前的实现方法是将集合转换为列表,然后在其上折叠
snoc
,这是非常低效的。下面有
ByteString.head
ByteString.tail
——如果它们是指针操作,使用它们遍历ByteString可能有不错的性能。@EarlGray AFAIK下面有指针操作<代码>头部和
尾部
足以折叠。但是遍历的问题是它还需要用修改过的元素重建结构。谢谢,这个包看起来很有趣。你知道这些方法的实施效率有多高吗?他们是通过testring或
Text
的内部结构访问
还是执行类似于
包的操作。穿越f。打开包装
?@PetrPudlák看着,似乎它只是一个包装。地图f。打开包装
traverse :: (Applicative f) => (Word8 -> f Word8) -> ByteString -> f ByteString
traverse :: (Applicative f) => (Char -> f Char) -> Text -> f Text