Message is a component in the Elm architecture. These components are generated by the View in response to the user's interaction with the application's interface. Messages represent user requests to alter the application's state.
--Message Syntax type Message = some_message1 |some_message2 ...|some_messageN
The following example is a simple counter application. The application increments and decrements the value of a variable by 1 when the user clicks on the Add and Subtract buttons respectively.
The application will have 4 components. The components are described below −
The messages for this example will be −
type Message = Add | Subtract
The model represents the state of the application. In the counter application the model definition is given below; the initial state of counter will be zero.
model = 0
The view represents the visual elements of the application. The view contains two buttons ( + ) and ( - ) . The messages Add and Subtract are generated by the View when the user clicks on the + and - buttons respectively. The modified value of the model is then displayed by the View.
view model = -- invoke text function h1[] [ div[] [text "CounterApp from Howcodex" ] ,button[onClick Subtract] [text "-"] ,div[][text (toString model)] ,button[onClick Add] [text "+"] ]
This component contains code that should be executed for each message generated by the view. This is shown in the example below −
update msg model = case msg of Add -> model+1 Subtract -> model-1
Step 1 − Create a folder MessagesApp and file MessagesDemo.elm
Step 2 − Add the following code in elm file −
import Html exposing (..) import Html.Events exposing(onClick) model = 0 -- Defining the Model --Defining the View view model = h1[] [ div[] [text "CounterApp from Howcodex" ] ,button[onClick Subtract] [text "-"] ,div[][text (toString model)] ,button[onClick Add] [text "+"] ] --Defining the Messages type Message = Add | Subtract --Defining Update update msg model = case msg of Add -> model+1 Subtract -> model-1 -- Define the main method main = beginnerProgram { model=model ,view=view ,update=update }
Step 3 − Execute the elm make command in terminal. The elm make command compiles the code and generates an HTML file from the .elm file created above.
C:\Users\dell\elm\MessagesApp> elm make .\MessageDemo.elm Some new packages are needed. Here is the upgrade plan. Install: elm-lang/core 5.1.1 elm-lang/html 2.0.0 elm-lang/virtual-dom 2.0.4 Do you approve of this plan? [Y/n] y Starting downloads... ΓùÅ elm-lang/html 2.0.0 ΓùÅ elm-lang/virtual-dom 2.0.4 ΓùÅ elm-lang/core 5.1.1 Packages configured successfully! Success! Compiled 38 modules. Successfully generated index.html
Step 4 − Open the index.html and verify the working as shown below −