Sto scrivendo un trasformatore di flusso da un tipo di dati di input a un tipo di dati di output. L'input è fatto dall'utente, quindi c'è un po 'di tempo tra gli eventi. Poiché ogni input richiede il caricamento di alcune risorse, mi piacerebbe "guardare al futuro", cioè inviare tutti i possibili input alle principali risorse di computazione e precarico in base ai risultati.Ci sono monadi che possono essere usati come un automa?
Attualmente, c'è sempre esattamente un output dopo ogni input ma potrebbe eventualmente diventare interessante cambiarlo.
Sono riuscito a implementarlo con il trasformatore Automaton di Ross Paterson. Non sono sicuro che la mia soluzione sia ottimale.
- Ci sono dei buoni esempi su come farlo? Forse anche con il codice di prova?
- Può essere raggiunto anche con una monade? (Esempi ?, Spiegazione perché è impossibile?)
Edit: Dopo la richiesta di ulteriori specifiche, ho aggiunto il codice qui. Ora lo rimuovo (non era comprensibile) e aggiungo qualche altra spiegazione. La mia domanda viene risposto thaugh.
La mia intenzione era quella di arrestare il ciclo di eventi principale dopo ogni input dell'utente che è stato inviato al trasformatore di frecce/stream/qualunque. Quindi memorizzerebbe lo stato corrente dell'automa e invierà uno alla volta tutti gli input possibili (eventi falsi) all'automa e vedrà quali risorse devono essere caricate, per memorizzarle nella cache. Dopo il prossimo evento reale, userebbe la cache per una migliore reattività. Il calcolo principale non dovrebbe essere influenzato da questo.
non qualificato per rispondere, ma le iterazioni potrebbero essere utili. Vedi questa libreria: http://hackage.haskell.org/package/enumerator ... ma le frecce sembrerebbero una buona astrazione. Scommetto che più specifiche potrebbero aiutare le persone a rispondere. – jberryman
+1 su più specifiche. – sclv