2015-03-27 3 views
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 

Я хочу, чтобы отобразить тип Phonepad числа. Скажи testtt dayPad 2 == "Tuesday" Я хочу получить Tuesday:

read $ testtt dayPad 2 :: PhonePad 

Но он всегда возвращает сообщ об ошибке:

*** Exception: Prelude.read: no parse 

Кто-нибудь знает, что здесь не так?

+0

Вам действительно нужны строки в 'PhonePad'? Будет ли «набирать PhonePad = [(Int, PhoneDay)]' достаточно? – chi

ответ

5

Tuesday не является PhonePad, это PhoneDay. Попытка прочитать строку "Tuesday" как type PhonePad = [(Int,String)] приводит к ошибке, поскольку она не отформатирована как список кортежей Int s и String s.

Prelude> (read $ testtt dayPad 2) :: PhonePad 
*** Exception: Prelude.read: no parse 

(testtt dayPad 2 == "Tuesday")

Если вместо этого попытаться прочитать строку "Tuesday" как PhoneDay он работает.

Prelude> (read $ testtt dayPad 2) :: PhoneDay 
Tuesday 
+0

О, спасибо вам большое !!!! Как небрежно со мной ... –

Смежные вопросы