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”(英语)等等?