我在想Haskell中的列表,並且我認爲在其他語言中,一個不使用列表的一切。當然,如果你以後需要這些值,你可能想要存儲一個列表,但是如果它只是一次性的,比如從[1..n]
開始迭代,爲什麼使用一個列表,其中真正需要的變量是一個增加的變量?管道,替換列表?
我還閱讀了關於「列表融合」的內容,並指出儘管Haskell編譯器試圖實現這種優化以消除中間列表,但它們往往不成功,導致垃圾收集器不得不清理僅被使用一次的列表。
另外,如果你不小心一個可以輕鬆地共享一個列表,這意味着垃圾收集不清理,這可能會導致與以前的設計在不斷運行的算法運行內存空間。
所以我認爲這將是最好的,以避免完全名單,至少在一個實際上並不想「商店」名單。
我然後在conduit
來了,它是說:
解決數據流的問題,允許生產, 改造,並在不斷的 存儲器中的數據流的消費。
這聽起來很不錯。我知道conduit
是專爲IO
資源獲取和發佈問題的問題而設計的,但是可以將它用作替代列表的替代品嗎?
例如,我可以做到以下幾點:
fold f3 $ take 10 $ map f2 $ unfold f1 init_value
而且有一些適當放置類型標註,使用管道的整個過程,而不是名單?
我希望或許classy-prelude
會允許這樣的代碼,但我不知道。如果有可能,有人可以舉一個例子,像上面這樣說嗎?
你對名單的直覺是不正確的,我想,你也可以忘記了懶惰的評價,當你談論「存儲」一名單。在任何情況下,「管道」正在解決的問題都是懶惰IO提出的問題。也看看'vector'軟件包。 – jberryman