型アノテーション付きの関数を作成したいTime t => t -> Bool
。Data.Timeのドキュメントを見ると、、、、などUTCTime
、時間どおりに機能するいくつかの異なるタイプがありますがLocalTime
、ZonedTime
それらを統合するタイプクラスは見つかりません。そのようなものはありますか、それとも時間を同じように扱う必要がありNum
ますか?(つまり、連続体)
5 に答える
vector-space パッケージには、アフィン空間 typeclassがあります。
Diff p
ここで、 は期間タイプ ( のインスタンスである必要がありますVectorSpace
) であり、p
は時点タイプです。Ord
比較のために追加のインスタンスが必要になります。
これにより、時点間の線形補間が無料で提供されます。
標準時ライブラリにはそのような型クラスはありませんが、自分で実装することは可能です。
UTCTime
ただし、通常は、すべての時間ベースの計算に使用される方法でプログラム ロジックを構築する必要があります(これは Haskell 固有ではありません)。LocalTime
UTCとZonedTime
、ユーザーに表示されるプレゼンテーション、または外部ソースからのデータとの間で相互に変換するためにのみ使用する必要があります。これがおそらく、ローカルおよびゾーン時間タイプの時間差と時間追加を計算するための既製の関数がない理由です。
時間がちょっとおかしい。
時間は、特定の瞬間(例: 09:27 AM, 14 Feb 1821 AD) または期間(例: 6 分) を参照できます。
期間を加算および減算することは理にかなっています。時間内の 2 つの瞬間の合計を求めることは、実際には意味がありません。これは何を表しているでしょう?インスタントに期間を追加すると、別のインスタントが得られます。それは理にかなっている。そして、あるインスタンスを別のインスタンスから差し引くと、それらの間の期間が得られるはずです。
要約すると、時相演算は想像するほど単純ではありません。
さて、time
パッケージは何を提供しますか? 何も思いつきません。あなたが言及したすべての時間は、持続時間ではなく、瞬間のように聞こえます...
ドキュメント ( http://www.haskell.org/ghc/docs/7.0.2/html/libraries/time-1.2.0.3/Data-Time-Format.html ) によると、UTCTime、ZonedTime、および LocalTime はすべて型クラス FormatTime および ParseTime のインスタンス。それらはあなたが探しているものでなければなりません。