krzysztof-w
6/30/2017 - 7:41 PM

GenServer.elm

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 ]