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

Parsing 使用自定义分隔符进行Haskell日期解析,parsing,haskell,Parsing,Haskell,我正试图打印出这样的内容: 这是我的密码: 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 ye

我正试图打印出这样的内容:

这是我的密码:

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"
导入系统环境
导入数据。时间
main=do args字符串
showDateFormat(y,m,d)=y++“/”++m++“/”++d++“\n”
我不知道怎么了

这是我得到的错误:


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

showDateFormat :: (Integer,Int,Int) -> String
showDateFormat (y,m,d) = show y ++ "/" ++ show m ++ "/" ++ show d ++ "\n"
showDateFormat::(整型,整型,整型)->String
showDateFormat(y,m,d)=显示y++“/”+++show m++“/”+++show d++“\n”
错误消息从字面上告诉您,它希望
y
[Char]
类型的值(也称
String
),因为
++
(接收
“/”::String
作为一个参数)希望
字符串
作为另一个参数,但您必须为
y
传递一个
整数


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

你怎么知道有问题?你试图用字符
'/'
而不是字符串
“/”
+
@chepner我以前试过……这不是你唯一的问题。Haskell不会自动将
Int
转换为
字符串
;你必须明确地这样做。原因是,有很多方法可以做到这一点:整数51是否应该表示为“51”(十进制)、“00110011”(二进制)、“30”(基数17)、“LI”(罗马数字)、“51”(英语)等等?