比较 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"