मैं लगभग एक महीने तक हास्केल के साथ खेल रहा हूं। मेरे पहले "असली" हास्केल प्रोजेक्ट के लिए मैं एक भाग-भाषण टैगर लिख रहा हूं।
data Tag = CC | CD | DT | EX | FW | IN | JJ | JJR | JJS ...
से ऊपर है मानकीकृत भागों के- भाषण टैग जो मैंने की एक लंबी सूची: इस परियोजना के हिस्से के रूप में मैं इस प्रकार के रूप में लागू एक प्रकार Tag
कहा जाता है कि एक भागों के- भाषण टैग का प्रतिनिधित्व करता है, जानबूझकर छंटनी हालांकि, टैग के इस मानक सेट में दो डॉलर हैं जो डॉलर के चिह्न ($) में समाप्त होते हैं: पीआरपी $ और एनएनपी $। क्योंकि मेरे पास उनके नाम पर $ के साथ टाइप कन्स्ट्रक्टर नहीं हो सकते हैं, इसलिए मैंने उन्हें पीआरपीएस और एनएनपीएस का नाम बदलने के लिए चुना है।
यह सब ठीक है और अच्छा है, लेकिन मैं एक लेक्सिकॉन में तारों से टैग पढ़ना चाहता हूं और उन्हें अपने Tag
प्रकार में परिवर्तित करना चाहता हूं। इस कोशिश कर रहा है विफल रहता है:
instance Read Tag where
readsPrec _ input =
(\inp -> [((NNPS), rest) | ("NNP$", rest) <- lex inp]) input
हास्केल lexer $ पर chokes। कोई विचार यह कैसे खींचें?
कार्यान्वयन शो काफी सरल था। अगर पढ़ने के लिए कुछ समान रणनीति थी तो यह बहुत अच्छा होगा।
instance Show Tag where
showsPrec _ NNPS = showString "NNP$"
showsPrec _ PRPS = showString "PRP$"
showsPrec _ tag = shows tag
बहुत ही समय में आपको अपने स्वयं के 'शो' और' रीड 'उदाहरण लिखना चाहिए, बजाय स्वचालित रूप से प्राप्त होने वाले उदाहरणों का उपयोग करने के बजाय, यदि आपका डेटा प्रकार इसके आंतरिक प्रतिनिधित्व को छुपाता है (जैसे' Data.Set.Set 'और ऐसे, जो' सेलिस्ट 'कॉल को थूकते हैं) या शाब्दिक के साथ काम करते हैं, उदाहरण के लिए 'नम' का एक उदाहरण एक पूर्णांक शब्दकोष थूकना यह मेल खाता है। –