Haskell:在ByteString中更改给定索引处的元素

时间:2015-11-06 19:08:57

标签: haskell bytestring lens lenses

我试图将由ByteString s组成的矩阵中的索引x和y处的字符更改为不同的字符。最初,我使用[[Char]]来表示矩阵,因此我可以使用.~中的Control.Lens.Setter来更改值,但这似乎不适用于{{1 }}。

是否有任何方法可以使用镜头或修改元素而[ByteString] {I}现在正在做unpack

现在的代码是:

ByteString

render :: [[Char]] -> [Loc Int] -> [[Char]] render maze [] = maze render maze (Loc (x,y):locs) = render mutate locs where mutate = element y . element x .~ '*' $ maze 只是:

Loc

1 个答案:

答案 0 :(得分:2)

适用于ByteStrings:

import qualified Data.ByteString.Char8 as BS
import Control.Lens

-- change character at position 2 to a space (ASCII code 32)

test = (BS.pack "abcdef") & ix 2 .~ 32

请注意,ByteStrings实际上是Word8值的容器,所以我们需要在这里使用ASCII代码。

ix运算符适用于许多其他数据结构,如文本,列表,集合,地图等 - 有关详细信息,请参阅here