module EventLoop.Main(start) where

import EventLoop.EventProcessor
import EventLoop.Input.InputEvent
import EventLoop.Output.OutputEvent
import EventLoop.Json
         
start :: (a -> InputEvent -> ([OutputEvent], a)) -> a -> IO()
start handler beginstate = eventloop handler' beginstate
                        where
                            handler' = changeTypes handler


changeTypes :: (a -> InputEvent -> ([OutputEvent], a)) -> a -> IOMessage -> ([IOMessage], a)
changeTypes f state message = (map toJsonMessage oEvents, state')
                    where
                        iEvent = fromJsonMessage message
                        (oEvents, state') = f state iEvent