我試圖執行包含元素列表的嵌套數據結構的操作。經過各種方法的磨合後,我終於決定將鏡頭作爲實現這一目標的最佳方式。它們完美地用於查找和修改結構的特定元素,但到目前爲止,我很難理解如何添加新元素。使用鏡頭在特定位置插入列表
從我讀過的內容來看,我不能在技術上使用遍歷,因爲它違反了遍歷法則以將新元素插入到列表中,假設我甚至可以弄清楚如何在Traversal中使用遍歷第一名(我在Haskell方面仍然很弱,鏡頭包裝中大部分東西的類型簽名讓我頭暈)。
具體而言,我試圖完成的是,在匹配特定選擇器的元素列表中找到某個元素,然後在匹配元素之前或之後插入一個新元素(該函數的不同參數比賽之前或之後)。 Control.Lens是否已經有能夠完成我想要做的事情,並且我對類型簽名的理解太弱,無法看到它?有沒有更好的方法來完成我想要做的事情?
如果我只是試圖向列表的開頭或結尾添加一個新元素,但將其插入某個特定中間位置是困難的部分,那將是相當微不足道的。在我寫的一些預鏡片代碼中,我用摺疊來實現我想要的東西,但它開始在結構的更深層嵌套部分(EG摺疊在摺疊內部的摺疊部分內)粗糙地如此我轉向Control.Lens試圖解開一些混亂。
你有沒有考慮過像ziplist而不是普通列表?這將使得在焦點元素之前或之後插入元素變得很容易。 – kqr
我已經考慮過了,但初始數據結構的構建方式很難轉換爲ziplist,所以我可能必須在事實之後將其轉換,這意味着完全獨立的類型層次結構只是爲了包含ziplists。無論是我還是我從列表轉換成ziplist,然後每次我需要做一個插入,我可以做,但似乎沒有比首先摺疊整個列表更好。 – Orclev