Haskell读取没有解析器错误

Yiy*_*ang 1 haskell

我有这行代码,但它有一些问题..

type PhonePad = [(Int,String)]
dayPad = [(1,"Monday"), (2,"Tuesday")] -- I don't list out all of them
data PhoneDay = Monday | Tuesday
    deriving (Eq, Ord,Show,Read,Bounded)
testtt :: PhonePad -> Int -> String
testtt p d = snd $ (filter (\x -> fst x == d) p)!!0
Run Code Online (Sandbox Code Playgroud)

我想显示一个号码的PhonePad类型.说testtt dayPad 2 == "Tuesday" 我想得到Tuesday:

read $ testtt dayPad 2 :: PhonePad
Run Code Online (Sandbox Code Playgroud)

但它始终返回错误消息:

*** Exception: Prelude.read: no parse
Run Code Online (Sandbox Code Playgroud)

有谁知道这里有什么问题吗?

Cir*_*dec 5

Tuesday不是PhonePad,它是一个PhoneDay.试图读取该字符串"Tuesday"作为type PhonePad = [(Int,String)]一个错误的结果,因为它没有格式化像一个元组列表IntS和String秒.

Prelude> (read $ testtt dayPad 2) :: PhonePad
*** Exception: Prelude.read: no parse
Run Code Online (Sandbox Code Playgroud)

(testtt dayPad 2 == "Tuesday")

如果您尝试读取字符串"Tuesday"作为PhoneDay它的工作原理.

Prelude> (read $ testtt dayPad 2) :: PhoneDay
Tuesday
Run Code Online (Sandbox Code Playgroud)