我想在haskell中獲取UTC時間戳。原始功能getPOSIXTime
以秒爲單位給出時間戳。我希望它在毫秒和微秒。我寫了一個函數通過這樣的因素乘以秒時間戳:Haskell無法與Int類型Data.Time.Clock.UTC.NominalDiffTime匹配
-- get timestamp in seconds multiplied by factor
getTimestampX :: Int -> IO Int
getTimestampX n = do
tstamp <- fmap (truncate . (* n)) getPOSIXTime
let str = show tstamp
intval = read str :: Int
return intval
然而,這是拋出以下錯誤:
Couldn't match type ‘time-1.6.0.1:Data.Time.Clock.UTC.NominalDiffTime’
with ‘Int’
Expected type: IO Int
Actual type: IO POSIXTime
• In the second argument of ‘fmap’, namely ‘getPOSIXTime’
In a stmt of a 'do' block:
tstamp <- fmap (truncate . (* n)) getPOSIXTime
In the expression:
do { tstamp <- fmap (truncate . (* n)) getPOSIXTime;
let str = show tstamp
intval = ...;
return intval }
但是,如果使用類似100,1000的任何整數值代替n
然後它工作正常。我在這裏錯過了一些概念嗎?任何幫助,將不勝感激。
'truncate'已經可以返回'Int'。你不需要「展示」,然後「閱讀」它。所以:'getTimestampX n = truncate。 (* fromInteral n)<$> getPOSIXTime'。 (不是因爲這個問題沒有解釋這個問題,而只是解決了這個問題,已經有了一個很好的答案和解釋。) –
我更喜歡這個答案。如果它在答案部分,我會將其標記爲答案。謝謝。 –