我正在寫一個流轉換器從一些輸入數據類型到一個輸出數據類型。輸入是由用戶進行的,所以事件之間有一段時間。因爲每個輸入都需要一些資源加載,所以我想「展望未來」,即將所有可能的輸入發送到主計算並根據結果預加載資源。是否有可以像自動機一樣使用的monads?
目前,每次輸入後總是隻有一個輸出,但最終可能會變得有趣。
我成功地用Ross Paterson的Automaton變壓器來實現它。我不確定我的解決方案是否最佳。
- 有沒有很好的例子如何做到這一點?甚至可能使用測試代碼?
- 它也可以用monad來實現嗎? (Examples ?, Explanation why why is impossible?)
編輯: 在更多細節的調用之後,我在這裏添加了代碼。現在我刪除它(這是不可理解的)並添加一些其他解釋。我的問題回答了。
我的意圖是讓主事件循環在每個用戶輸入已經被饋送到箭頭/流轉換器/任何東西之後停止。然後它會存儲當前的自動機狀態,並將所有可能的輸入(假事件)逐個發送給自動機,並查看必須加載哪些資源以緩存它們。在下一個真實事件之後,它會使用緩存來提高響應速度。主要計算不應受此影響。
沒有資格回答,但迭代可能對您有用。看到這個庫:http://hackage.haskell.org/package/enumerator ...但箭頭似乎是一個很好的抽象。我敢打賭,更多細節會幫助人們回答。 – jberryman
+1更具體。 – sclv