eat_token (_ p) tk2 = error "Syntax Error at:"++(show p)
Haskell не поддерживает анонимные конструкторы (т. Е. Использование подчеркивания для сопоставления с образцом любого конструктора), даже если все конструкторы типа данных имеют одинаковые элементы.
Вы можете использовать поля записи в вашем типе данных, это автоматически создаст функцию доступа:
data Token = THEN { src_pos :: AlexPosn }
| ELSE { src_pos :: AlexPosn }
Это создаст функцию src_pos
, которую вы можете использовать как любую другую функцию:
eat_token tok ts2 = error "Syntax Error at: " ++ (show (src_pos tok))
Кстати, Алекс (и Хэппи) не особенно дружелюбны для начинающих.В настоящее время большинство людей используют Parsec / Attoparsec.С Parsec вы пишете код синтаксического анализа на Haskell, а не с препроцессором.