haskell – 是否有ByadString或Text的monadic / applicative map(即traverse / mapM)函数?

ByteString
Text有标准(纯)地图功能:

map :: (Word8 -> Word8) -> ByteString -> ByteString
map :: (Char -> Char) -> Text -> Text

但我错过了他们的monadic / applicative同行:

traverse :: (Applicative f) => (Word8 -> f Word8) -> ByteString -> f ByteString
traverse :: (Applicative f) => (Char -> f Char) -> Text -> f Text

(如果我们有遍历,我们可以定义mapM f = unwrapMonad.traverse(WrapMonad.f).)

我试着查看包裹,试过Hoogle,但我找不到它们.我忽略了什么吗?或者是否有一个原因导致它们丢失(就像它不可能/很容易有效地定义它们)?

最佳答案 顺便提一下,你在Edward Kmett的
lens套餐中拥有你所需要的一切;您想要的遍历版本只是Data.Bytestring.Lens.bytes和Data.Text.Lens.text.

编辑:为了澄清,上面提到的函数是(一般化)类型SimpleTraversal ce(分别为(c~Bytestring,e~Word8)和(c~Text,e~Char)),这是一个类型的同义词对于forall f. (适用的f)=> (e – > f e) – > c – > f c

点赞