Я играл с Haskell в течение около месяца. Для моего первого «реального» Haskell Project я пишу частей речевой теггера. В рамках этого проекта у меня есть тип под названием TAG
, который представляет собой тег деталей, реализованную следующим образом:
data Tag = CC | CD | DT | EX | FW | IN | JJ | JJR | JJS ...
Вышеупомянутый - длинный список стандартизированных деталей-речевых тегов, которые я намеренно усечена. Однако в этом стандартном наборе тегов есть два, которые заканчиваются в знак доллара ($): PRP $ и NNP $. Поскольку у меня не может быть типа конструкторов с $ в их имени, я решил переименовать их PRP и NNPS.
Это все хорошо и хорошо, но я хотел бы читать теги от струн в лексиконе и преобразовывать их в мою тему
. Попытка этого не удается:
instance Read Tag where
readsPrec _ input =
(\inp -> [((NNPS), rest) | ("NNP$", rest) <- lex inp]) input
Haskell Lexer выступает на $. Любые идеи, как это потянуть?
Реализация шоу было довольно простым. Было бы здорово, если бы была какая-то подобная стратегия для чтения.
instance Show Tag where
showsPrec _ NNPS = showString "NNP$"
showsPrec _ PRPS = showString "PRP$"
showsPrec _ tag = shows tag