10
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Elm] Taskの使い方について端的に

Last updated at Posted at 2019-11-03

長めのしっかり解説した記事が多いので、ここでは端的に要点をまとめてみる。

Taskの使い方ざっくり

Taskは基本的に非同期処理の結果をMsgのペイロードに乗せてCmdを発行するために使われる。

具体的な使い方

言葉で
Task.attempt (ResultをペイロードにとるMsgのコンストラクタ) (Task e x)
コードで
type Msg = ExampleMsg (Result e x)

Task.attempt (ExampleMsg (Result e x)) (Task e x)

Taskのeとx、ExampleMsgのペイロードであるところのResultのeとxが一致することが重要。
失敗する可能性がない場合はattemptではなくperformを用いる。

言葉で
Task.perform (xをペイロードにとるMsgのコンストラクタ) (Task Never x)
コードで
type Msg = ExampleMsg x

Task.perform (ExampleMsg x) (Task Never x)

以下、それぞれattemptとperformの定義

attempt : (Result x a -> msg) -> Task x a -> Cmd msg
perform : (a -> msg) -> Task Never a -> Cmd msg

ちなみに、Taskの定義は幽霊型だったりする。

type Task err ok = Task

よって、Taskを生成するためにはsucceedfailを始めとしたAPIを用いる必要がある。

succeed : a -> Task x a
fail : x -> Task x a

便利な点

mapandThenonErrormapErrorを使用することでCmdにする前にTask e xexを自在に変換しておくことができる。

よって、最終的に欲しい値以外のtempな値をCmdで飛ばしたりmodelに保持したりする必要がなくなる。

参考

Task - core 1.0.2 | elm-lang.org
ElmでHttpをわかってしまおう - @ababup1192 | Qiita

以上。

10
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?