Program > JavaScript > AltJS > Elm > Elmガイド > コマンドとサブスクリプション > HTTP
サンプルコード
#code(haskell){{
import Browser
import Html exposing (Html, text, pre)
import Http
main =
Browser.element { init = init , update = update , subscriptions = subscriptions , view = view }
type Model
= Failure | Loading | Success String
init : () -> (Model, Cmd Msg)
init _ =
( Loading , Http.get { url = "https://elm-lang.org/assets/public-opinion.txt" , expect = Http.expectString GotText } )
type Msg
= GotText (Result Http.Error String)
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of GotText result -> case result of Ok fullText -> (Success fullText, Cmd.none)
Err _ -> (Failure, Cmd.none)
subscriptions : Model -> Sub Msg
subscriptions model =
Sub.none
view : Model -> Html Msg
view model =
case model of Failure -> text "I was unable to load your book."
Loading -> text "Loading..."
Success fullText -> pre [] [ text fullText ]
}}
パッと見、見事にサッパリ意味が分からない!
焦らずにじっくり学べば、後で意味が分かるようになるのかなー。(ちょっと不安)
#code(haskell){{
init : () -> (Model, Cmd Msg)
init _ =
( Loading , Http.get { url = "https://elm-lang.org/assets/public-opinion.txt" , expect = Http.expectString GotText } )
}}
上記のコード片の中で、
Http.expectString
の部分がCmdに該当している。
関数定義の型注釈を見ると、init関数の返り値は、(Model, Cmd Msg)となっており、Cmdとその引数であるMsgが返り値に含まれていることが分かる。
このプログラムにおけるもう一つの新しい部分はsubscription関数になります。
Modelの情報から判断して何らかの情報に対する待ち受けするかどうかを決めることができます。
今回の例ではSub.noneとして何も待ち受けする必要がないことを示していますが、後ほど現在時刻を待ち受ける必要がある時計の例を見ていきます。
#code(haskell){{
Sub.none}}
Elmのランタイムシステムに対して、処理やデータを渡したり、受け取ったりできる、ということですね?
何となく雰囲気はつかめました。