通常,您可以通过拆分列表、替换元素并将其重新连接在一起来修改列表的元素。
要在索引处拆分列表,我们有:
splitAt :: Int -> [a] -> ([a], [a])
您可以使用它来分解列表,如下所示:
> splitAt 2 ["Off","Off","Off","Off"]
(["Off","Off"],["Off","Off"])
现在你只需要弹出snd
列表的组成部分。这很容易完成模式匹配:
> let (x,_:ys) = splitAt 2 ["Off","Off","Off","Off"]
> x
["Off","Off"]
> ys
["Off"]
您现在可以通过“On”重新加入列表:
> x ++ "On" : ys
["Off","Off","On","Off"]
我将让您将这些部分组合成一个函数。
作为风格注释,我建议使用新的自定义数据类型,而不是String
对于你的切换:
data Toggle = On | Off deriving Show