module Reactive.Threepenny.Types where
import Control.Monad.Trans.RWS.Lazy
import Data.Functor.Identity ()
import Data.Hashable
import qualified Data.Vault.Strict as Vault.Strict
import Data.Unique.Really
type Values = Vault.Strict.Vault
type Handler = EvalP (IO ())
data Priority = DoLatch | DoIO deriving (Eq,Show,Ord,Enum)
data Pulse a = Pulse
{ addHandlerP :: ((Unique, Priority), Handler) -> Build (IO ())
, evalP :: EvalP (Maybe a)
}
instance Hashable Priority where hashWithSalt _ = fromEnum
data Latch a = Latch { readL :: EvalL a }
type EvalP = RWST () () Values BuildIO
type EvalL = IO
type Build = IO
type BuildIO = Build