我试图将由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
答案 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。