약 한 달 동안 하스켈과 게임을 해왔습니다. 내 첫 "진짜"하스켈 프로젝트에서 나는 품사 태그 작성기를 쓰고있다. 나는했습니다 표준화 된 품사 태그의 긴 목록을 위
data Tag = CC | CD | DT | EX | FW | IN | JJ | JJR | JJS ...
입니다 다음과 같이이 프로젝트의 일환으로 나는 구현하는 품사 태그를 나타냅니다 Tag
라는 유형이 의도적으로 잘 렸습니다. 그러나이 표준 태그 세트에는 $ (PRP $ 및 NNP $)로 끝나는 두 개의 태그가 있습니다. 이름에 $가있는 유형 생성자를 사용할 수 없으므로 이름을 PRPS 및 NNPS로 변경했습니다.
이 모든 것이 훌륭하지만 어휘집의 문자열에서 태그를 읽고 내 Tag
유형으로 변환하고 싶습니다. 이 시도는 실패합니다 :
instance Read Tag where
readsPrec _ input =
(\inp -> [((NNPS), rest) | ("NNP$", rest) <- lex inp]) input
$에있는 하스켈 렉서 초크. 이 아이디어를 풀어내는 방법은 무엇입니까?
쇼 구현은 매우 간단했습니다. 읽기와 비슷한 전략이 있다면 좋을 것입니다.
instance Show Tag where
showsPrec _ NNPS = showString "NNP$"
showsPrec _ PRPS = showString "PRP$"
showsPrec _ tag = shows tag
자동으로 파생 된 인스턴스를 사용하는 대신 자신 만의'Show' 및'Read' 인스턴스를 작성해야 할 때가 거의 없습니다. 데이터 유형이 내부 표현 (예 :'Data.Set.Set 'and such,'fromList' 호출을 내뱉습니다) 또는 리터럴로 작동합니다. 'Num'의 인스턴스는 정수 리터럴을 출력합니다. –