[英]Haskell: Changing an element at a given index in a ByteString
我正在尝试ByteString
s组成的矩阵中的索引x和y处的字符更改为其他字符。 起初,我用[[Char]]
代表矩阵,所以我能够使用.~
从Control.Lens.Setter
更改值,但是这似乎并没有对工作[ByteString]
。
有没有什么方法可以像我现在正在使用的那样,在不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
所在的位置:
newtype Loc a = Loc (a,a) deriving (Show,Eq,Ord)
这适用于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
运算符可用于许多其他数据结构,例如文本,列表,集合,地图等-有关更多详细信息,请参见此处 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.