Вы, вероятно, хотите линзы .
{-# LANGUAGE TemplateHaskell #-}
import Control.Lens
data Typex = Typex
{ _level :: Int
, _coordinate :: (Int, Int)
, _connections :: [(Int,(Int,Int),Double)]
} deriving Show
makeLenses ''Typex
main :: IO ()
main = print $ [[Typex 0 (0,0) []]
,[Typex 1 (1,1) [], Typex 1 (2,2) []]
,[]]
& ix 1 . ix 0 . connections
%~ ((9,(9,9),pi):)
В этом примере вложенный список проиндексирован (ix
) в середине середины. элемент, в этом Typex
значении, сфокусированном на поле connections
, и там элемент (9,(9,9),pi)
добавлен. Результат:
[[Typex {_level = 0, _coordinate = (0,0), _connections = []}],[Typex {_level = 1, _coordinate = (1,1), _connections = [(9,(9,9),3.141592653589793)]},Typex {_level = 1, _coordinate = (2,2), _connections = []}],[]]