程式

當你的應用程式不需要任何外部資料進行初始化時,program 是一個很好的選擇。

它能夠處理訂閱和命令,從而為處理 I / O 提供更多機會,例如 HTTP 通訊或與 JavaScript 互操作。

初始狀態需要與模型一起返回啟動命令。

program 的初始化將需要提供 subscriptions,以及 modelviewupdate

檢視型別定義:

program :
    { init : ( model, Cmd msg )
    , update : msg -> model -> ( model, Cmd msg )
    , subscriptions : model -> Sub msg
    , view : model -> Html msg
    }
    -> Program Never

最簡單的說明方法是,如何使用 Subscriptions 來設定與 JavaScript 的簡單通訊。

瞭解如何在 Initialize 和 build / Embedding into HTML 中構建示例

port module Main exposing (..)

import Html exposing (Html, text)
import Html exposing (program)

main : Program Never
main =
    program
        { init = init
        , view = view
        , update = update
        , subscriptions = subscriptions
        }

port input : (Int -> msg) -> Sub msg

-- MODEL

type alias Model =
    Int

init : ( Model, Cmd msg )
init =
    ( 0, Cmd.none )

-- UPDATE

type Msg = Incoming Int

update : Msg -> Model -> ( Model, Cmd msg )
update msg model =
    case msg of
        Incoming x ->
          ( x, Cmd.none )

-- SUBSCRIPTIONS

subscriptions : Model -> Sub Msg
subscriptions model =
    input Incoming

-- VIEW

view : Model -> Html msg
view model =
    text (toString model)
<!DOCTYPE html>
<html>
    <head>
        <script src='elm.js'></script>
</head>
    <body>
    <div id='app'></div>
    <script>var app = Elm.Main.embed(document.getElementById('app'));</script>
    <button onclick='app.ports.input.send(1);'>send</button>
</body>
</html>