我在将下面这些函数的输出转换为 Int 时遇到了一些问题
date :: IO (Integer,Int,Int)
date = getCurrentTime >>= return . toGregorian . utctDay
date' :: IO Integer
date' = getCurrentTime >>= return . toModifiedJulianDay . utctDay
基本上我想从其中之一获取输出(只要可能就不会大惊小怪)并将其转换为 int 。例如今天是 20/4/2011,因此 date
将为 (2011,4,20)
,date'
将为 55671
.
在理想的世界中,我想要几个函数来扁平化这些 IO 函数以给出 Int – (2011,4,20)
到 2011420
和 55671
(当前为 IO Integer 类型)到 55671
作为 Int
如果有更好的方法来完成此操作,请告诉我!
编辑:抱歉,如果不清楚,我的意思是如何转换日期 (2011,4,20 )::IO (Integer,Int,Int)
到 20110420::Int
最佳答案
你知道如何从一元上下文返回值吗?
如果您有以下类型的函数:
date :: IO Integer
date = getCurrentTime >>= return . toModifiedJulianDay . utctDay
您可以从 IO
monad 中的任何其他函数使用它。就像这样:
main = do
n <- date
print n
其中n
的类型为Integer
。要(不安全地)将 Integer
转换为 Int
,请使用 fromIntegral
要将 IO Integer
函数实际转换为 IO Int
函数,请映射 fromIntegral
,如下所示:
date :: IO Integer
date = getCurrentTime >>= return . fromIntegral . toModifiedJulianDay . utctDay
关于date - 如何在 Haskell 中将日期转换为 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5735544/