繁体   English   中英

Haskell 使用自定义分隔符进行日期解析

[英]Haskell Date Parsing with Custom Separator

我试图打印出这样的东西:

在此处输入图像描述

这是我的代码:

import System.Environment
import Data.Time

main = do args <- getArgs
          let year = read $ args !! 0 
          let month = read $ args !! 1 
          let day = read $ args !! 2 
          let greg = fromGregorian year month day
          print $ showDateFormat $ toGregorian $ addDays 10 $ greg
          print $ showDateFormat $ toGregorian $ addDays 100 $ greg
          print $ showDateFormat $ toGregorian $ addDays 1000 $ greg
          print $ showDateFormat $ toGregorian $ addDays 10000 $ greg

showDateFormat :: (Integer,Int,Int) -> String
showDateFormat (y,m,d) = y ++ "/" ++ m ++ "/" ++ d ++ "\n"

我不知道出了什么问题。

这是我得到的错误:

在此处输入图像描述

Haskell 不会将一种类型的值隐式转换为另一种类型; 你必须明确地做这些事情。 在这种情况下,您可以使用showIntInteger转换为包含其 base-10 表示的字符串。

showDateFormat :: (Integer,Int,Int) -> String
showDateFormat (y,m,d) = show y ++ "/" ++ show m ++ "/" ++ show d ++ "\n"

错误消息实际上是在告诉您它期望y是类型[Char] (又名String )的值,因为++ (接收"/":: String作为一个参数)期望一个String作为另一个,但你有改为为y传递Integer值。

(注意String是预期的类型,因为它是++有效类型,而Integer不是。否则,类型检查器将使用左侧参数来修复类型。 [1::Int] ++ "foo"例如,失败是因为"foo"没有类型[Int] ,而不是因为[1]没有类型[Char] 。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM