Libs.hs:
...
--COMBINED FUNCTION TO VALIDATE A CREDIT CARD NUMBER
validateCard :: Integer -> Bool
validateCard x = compute x `mod` 10 == 0
where
compute :: Integer -> Integer
compute = addNumbers . subDoubles . doubleNumber . cardNumber
--DISPLAY USER MSG IF CARD IS VALID OR NOT
isValid card
| card == True = "This is a valid credit card!"
| otherwise = "This card is invalid"
Main.hs:
main :: IO ()
main = do
putStrLn "Please enter a credit card number:"
input <- getLine
isValid $ validateCard (read input :: Integer) --Converted to an Integer
所以我有这段Haskell代码。问题在于该函数采用整数,但用户输入返回字符串([Char])。我曾尝试使用read
函数将其转换为Integer,但它与[Char]与预期的IO()类型匹配。基本上我不知道如何将用户输入从字符串转换为整数。任何建议将不胜感激!
查看isValid
函数的类型:它是Bool -> [Char]
。
事实上,信用卡号不是数字。这是一小段数字。您可以使用例如[Int],尽管确实允许无限长的信用卡号,以及大于9或小于0的数字。要获取[Char]-> [Int]
,可以使用map
和Char-> Int
。使用Hoogle,我找到了Data.Char.digitToInt
。