【发布时间】:2020-05-24 17:13:06
【问题描述】:
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 函数将其转换为整数,但它会将 [Char] 与预期的 IO () 类型匹配。基本上我不知道如何将用户输入从字符串转换为整数。任何建议将不胜感激!
【问题讨论】:
-
如果你想要
Integer,为什么你指定read应该给你Int而不是Integer? -
isValid只返回一个String。你想用那个字符串做什么? -
@JosephSible-ReinstateMonica 因为我想知道从 int 到 integer 是否更容易。我已经更改了帖子以反映我最初是如何转换它的,但错误仍然发生
-
转换部分看起来不错 - 不是
isValid部分。你需要一个IO (),就像putStrLn生成的一样。尝试给isValid一个明确的类型来帮助你,也许一个更好的名字。 -
@JosephSible-ReinstateMonica 我想在控制台中使用
isValid向用户显示字符串
标签: string haskell integer converters