【发布时间】:2020-07-30 00:26:39
【问题描述】:
在编写一个小型日期程序作为练习在 Haskell 中处理 monad 时,我想出了下面的 localDate 辅助函数。我更喜欢绑定链接语法而不是 do 块 - 请提供任何关于一种语法是否更符合 Haskell 标准的输入。
我的主要问题与简化 localDate 有关。是否可以在不进行两次绑定操作的情况下将 getCurrentTimeZone 和 getCurrentTime 都传递给 utcToLocalTime?
localDate :: IO(Day)
localDate = localDay <$> zoneNow where
zoneNow = getCurrentTimeZone >>= \z -> getCurrentTime >>= \t -> return $ utcToLocalTime z t
localDate' :: IO(Day)
localDate' = do
z <- getCurrentTimeZone
t <- getCurrentTime
let zoneNow = utcToLocalTime z t
return $ localDay zoneNow
【问题讨论】:
-
你可以把这个改写成
utcToLocalTime <$> getCurrentTimeZone <*> getCurrentTime,把localDate改写成localDate = (. localDay) . utcToLocalTime <$> getCurrentTimeZone <*> getCurrentTime。 -
和
liftA2。
标签: haskell functional-programming monads