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

lensちなみに、Edward Kmett のパッケージにはまさに必要なものが含まれています。必要なtraverseバージョンは単にData.Bytestring.Lens.bytesData.Text.Lens.textです。

編集: 明確にするために、上記の関数は(の一般化)型SimpleTraversal c e(それぞれ for(c ~ Bytestring, e ~ Word8)および(c ~ Text, e ~ Char))であり、型の同義語ですforall f. (Applicative f) => (e -> f e) -> c -> f c

于 2012-10-18T18:20:38.077 に答える