Files
sml-projects/imperative-shell/update-thread.sml

33 lines
781 B
Standard ML
Raw Normal View History

signature UPDATE_THREAD =
sig
val run:
InputMessage.t Mailbox.mbox
* DrawMessage.t Mailbox.mbox
* AppType.app_type
-> unit
end
structure UpdateThread :> UPDATE_THREAD =
struct
open CML
open UpdateMessage
fun handleMsg (drawMailbox, updateMsg) =
case updateMsg of
DRAW drawMsg => Mailbox.send (drawMailbox, drawMsg)
| FILE fileMsg => ()
| NO_MAILBOX => ()
fun loop (inputMailbox, drawMailbox, model) =
let
val inputMsg = Mailbox.recv inputMailbox
val (model, updateMsg) = AppUpdate.update (model, inputMsg)
val _ = handleMsg (drawMailbox, updateMsg)
in
loop (inputMailbox, drawMailbox, model)
end
fun run (inputMailbox, drawMailbox, initial) =
loop (inputMailbox, drawMailbox, initial)
end