私は奇妙な状況を把握できません。地図上に多分(リストa)を使用するにはどうすればよいですか?
type alias Schedule =
{ name : String
, display : String
, interval : Maybe Int
, events : Maybe (List Event)
}
type alias Event =
{ schedule : Maybe String
, interval : Maybe Int
, hook : String
, args : List (String, String)
, timestamp : Int
, seconds_due : Int
}
setScheduledEventDueNow : Event -> Schedule -> Schedule
setScheduledEventDueNow event schedule =
case schedule.events of
Just events ->
{ schedule | events = List.map (setMatchedEventDueNow event) events }
Nothing ->
schedule
ありまたはSchedule
でEvents
のList
であってもなくてもよいので、それはevents : Maybe (List Event)
として設定されています。
既知のアクションに応答して、Event
がある場合は、スケジュール上のイベントを実行し、そのイベントの最新のリストを返す可能性があります。
しかし、私は次のエラーを取得しています:私は本当にイベントのリストは、すべてがそれをマッピングするために良いことがありますことを、case
文であったことが確認されていたので
-- TYPE MISMATCH ----------------------------------------- src/elm/CronPixie.elm
The 1st and 2nd branches of this `case` produce different types of values.
373| case schedule.events of
374| Just events ->
375| { schedule | events = List.map (setMatchedEventDueNow event) events }
376|
377| Nothing ->
378|> schedule
The 1st branch has this type:
{ a | events : List Event }
But the 2nd is:
{ a | events : Maybe (List Event) }
Hint: All branches in a `case` must have the same type. So no matter which one
we take, we always get back the same type of value.
Detected errors in 1 module.
私の初心者の脳は思いました。
しかし、コンパイラは、それが単純なものだと認識しています。List.map
の可能性はありません。したがって、当然、case
の2つのブランチによって返されるものの違いについては不平を言います。
どのようにすればいいですか?
これは動作します。より根本的な問題は、この場合に 'Maybe(List a)'型が本当に必要かどうかです。あなたのスケジュールにイベントがない場合(つまり、あなたのリストに何もない場合)、空のリスト '[]'はあなたの目的に役立ちませんか?あなたのイベントは 'Maybe.map'と' case'ステートメントを大幅に節約する 'List Event'の型になります。私は、リスト以外のものには 'Maybe'タイプしか必要ないことがわかりました。 'Maybe Int'、' Maybe Date'のようになります。ここで 'Nothing'は変数が空であることを意味します。 – wintvelt
それはあなたのビジネス要件に依存しますが、ほとんどの場合、それはちょうどいいと思います。空のリストがあなたのニーズに合ったときには不必要になる –
残念ながら、特定の状況下で 'スケジュール'に 'events'セクションを含まないかもしれないPHPバックエンドからのデータがあります。代わりに空リストを追加するといいでしょう。それは悪い考えではありません。私はまた 'スケジュール'のために 'Dict'を使うことを考えました、私は将来何かを調査するかもしれません。 – ianmjones