5

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

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

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

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

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

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

4

1 回答 1

2

顺便说一句,您在 Edward Kmett 的lens软件包中拥有您所需要的东西;您想要的traverse版本只是Data.Bytestring.Lens.bytesData.Text.Lens.text.

编辑: 为了澄清,上述功能是(泛化)类型SimpleTraversal c e(分别为(c ~ Bytestring, e ~ Word8)(c ~ Text, e ~ Char)),这是类型同义词forall f. (Applicative f) => (e -> f e) -> c -> f c

于 2012-10-18T18:20:38.077 回答