module GenServer exposing (genserver)
type alias GenServer a model msg =
{ send : a
, init : model
, update : Pid -> model -> msg -> (model, Cmd msg)
}
singleton : GenServer (Cmd a) model msg ->
regular : Genserver (Pid -> Cmd a) model msg
module GlobalCounter exposing (..)
type alias Model = Int
type Msg
= Increment
| Decrement
| Reset
| GetState Pid
main =
GenServer.singleton
{ init = init
, send = send
, update = update
}
send : msg ->
init : a -> Model
init = 0
update : Pid -> Model -> Message -> (Model, Cmd)
handleCast self state msg =
case msg of
Increment ->
state + 1 ! []
Decrement ->
state - 1 ! []
Reset ->
0 ! []
GetState from ->
state ! [ Process.send from state ]