比较 Haskell 中的不同数据类型
Comparing across data types in Haskell
试图找出比较具有相似值但类型不同的两个元素的最佳方法。
例如,如果用户输入 "A"、"B" 或 "C," 和 "No",此函数应打印 "Yes"。
data Letter = A | B | C deriving (Read, Show)
type LetterList = [Letter]
main = do
putStrLn "Enter a capital letter, and we'll see if it's in the Letter type!"
myLetter <- getLine
if myLetter `elem` myLetters -- here's the rub
then do
print "Yes"
else do
print "No"
where
myLetters :: LetterList
myLetters = [A,B,C]
对于您的具体示例,您可以简单地尝试使用 reads
:
来解析字符串
case reads myLetter :: [(Letter, String)] of
[(_, "")] -> putStrLn "yes"
otherwise -> putStrLn "no"
试图找出比较具有相似值但类型不同的两个元素的最佳方法。
例如,如果用户输入 "A"、"B" 或 "C," 和 "No",此函数应打印 "Yes"。
data Letter = A | B | C deriving (Read, Show)
type LetterList = [Letter]
main = do
putStrLn "Enter a capital letter, and we'll see if it's in the Letter type!"
myLetter <- getLine
if myLetter `elem` myLetters -- here's the rub
then do
print "Yes"
else do
print "No"
where
myLetters :: LetterList
myLetters = [A,B,C]
对于您的具体示例,您可以简单地尝试使用 reads
:
case reads myLetter :: [(Letter, String)] of
[(_, "")] -> putStrLn "yes"
otherwise -> putStrLn "no"