2016-06-11 9 views
0

現在の日付をレコードの中にDayの形式で保存するにはどうすればよいですか?これは正しい方法ですか?アプリケーションで日付を操作できるだけでなく、OpaleyeまたはEsqueletoを使用してデータベースに格納することもできます。現在の日付をレコードにDay型としてのみ格納する方法はありますか?

import Data.Time 
import Data.Time.Format 

data User = User 
    { userId :: Int 
    , name  :: Text 
    , loginDate :: Day 
    } deriving (Eq, Show) 


currentDay :: Day 
currentDay = utctDay <$> getCurrentTime ??? 

users :: [User] 
users = [ User 1 "A" currentDay 
     , User 2 "B" currentDay 
     ] 

しかしcurrentDayのタイプはIO Dayです:

は、私はこれを持っています。どうすれば Dayとして入手できますか?タイプの安全を壊さずには不可能だと思いますが、わかりません。

私はIO DayloginDateの種類を変えることができるが、その後、私はEqShowを導出することができるので、サーバントを使用している間deriveJSONを使用することができませんではないでしょう。 currentDayのタイプをIO DayusersからIO [User]に変更すると、私はServantタイプを使用できません。

答えて

1

currentDay(同様にgetCurrentTime)はIO作用である。現在の日を取得するには、IOモナドでそれを実行する必要があります。

あなたのコードは次のようになります。

currentDay :: IO Day 
currentDay = utctDay <$> getCurrentTime 

createUsers :: IO [User] 
createUsers = do 
    today <- currentDay 
    return [ User 1 "A" today, User 2 "B" today ] 
+0

しかし、私はサーバントとIOモナドを使用することはできません、私はできますか? – OneEyeQuestion

+1

できます。あなたのコードはどこに置いておきたいですか?通常は 'liftIO'を使用してください。 – ErikR

+0

IOモナド( 'IO [User]')と他のエンドポイント( '[Friend]')の2つのエンドポイントを組み合わせることはできますか? – OneEyeQuestion

関連する問題