私は自分がしていることを書く小さな時間追跡アプリケーションをプログラムしようとしていますが、それを記録するだけです。
ログへのエントリの追加を正常に実装しましたが、現在、最後のログエントリを期間で更新したいと考えています (たとえば、00:01 にプログラミングを開始したとき、現在は 00:20 であり、SO に関する質問を書き始めているため、そのログ エントリをリストに追加すると、リストの先頭に 19 分の期間が必要になるため、プログラミングに費やした時間がわかります)。
私はこのコードでそれをやろうとします:
addEntry: Model -> List LogEntry
addEntry model =
let
newEntry = { -- this is what we add
text = model.currentText,
timestamp = model.now,
duration = Nothing
}
lastEntry =
List.head model.log
in
case lastEntry of
Nothing ->
[newEntry] -- when the list was empty - create it with one element
Just le -> -- when not empty
newEntry :: {le | duration = newEntry.timestamp - le.timestamp } :: List.tail model.log
-- - add new element, modified head and tail
問題はそれList.tail model.log
でありMaybe List LogEntry
、私はそれが欲しいですJust List LogEntry
。Just List LogEntry
頭もJust LogEntry
.
そこで何をしますか?別のブランチをネストしcase
て、1 つのブランチをアクセス不可としてマークしますか? これを行う方法にはいくつかのパターンがありますか?List a -> Maybe (a, List a)
または、同じで頭と尾を返すような関数Maybe
ですか?