2016-06-11 69 views
0

如何將當前日期作爲Day類型存儲在記錄中?這是做這件事的正確方法嗎?我想這樣做是爲了能夠在應用程序中操作日期,還可以使用Opaleye或Esqueleto將它們存儲在數據庫中。如何僅將當前日期作爲日類型存儲在記錄中?

我有這樣的:

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?我猜這是不可能的,而不會破壞類型安全,但我不確定。

我的loginDate的類型更改爲IO Day但後來我就不能推導EqShow,因此無法同時使用的僕人使用deriveJSON。如果我將currentDay的類型更改爲IO DayusersIO [User],那麼我不能使用Servant類型。

回答

1

currentDay(以及getCurrentTime)是一個IO動作。您必須在IO-monad中執行它以檢索當前日期。

你的代碼應該是這樣的:

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 monad('IO [User]')而另一個不是('[Friend]')的兩個端點嗎? – OneEyeQuestion

相關問題