如何使用 GHCJS 获取当前时间?

How to get the current time with GHCJS?

如何用GHCJS获取当前时间?我应该尝试访问 Date 还是使用 Haskell 基础库? GHCJS 基础库中是否有实用函数?

我目前找到的解决方案非常丑陋,但它对我有用,所以也许它可以为某人节省一些时间:

{-# LANGUAGE JavaScriptFFI #-}

import GHCJS.Types( JSVal )
import GHCJS.Prim( fromJSString )

foreign import javascript unsafe "Date.now()+''" dateNow :: IO (JSVal)

asInteger = read (fromJSString dateNow) :: Integer -- this happens in IO

丑陋之处在于没有在 GHCJS 中找到 JSInteger 类型,这是获得 Date.now() 长整数结果所必需的。所以我需要生成一个字符串,将一个字符串连接到 Javascript 中 Date.now() 的结果。在这一点上,我可以得到一个 JSString 作为结果,但这不是 Read 的一个实例,所以使用 read 是行不通的。所以我得到一个 JSValue 并使用 fromJSString.

将其转换为 String

最终 GHCJS 中可能会有一个 JSInteger,或者 JSString 可能成为 Read 的一个实例,所以如果您将来阅读本文,请尝试更优雅的内容!

Data.Time.Clock 模块似乎运行良好:

import Data.Time.Clock (getCurrentTime)
import Data.Time.Format -- Show instance
main = do
  now <- getCurrentTime
  print now