हास्केल string literals कि \ भागने अनुक्रम का उपयोग की एक संख्या है। लोगों को इस तरह के \n
, \t
, \NUL
के रूप में।हास्केल: " 0" " 0" में कैसे प्राप्त करें?
अगर मैं स्ट्रिंग शाब्दिक है:
let s = "Newline: \\n Tab: \\t"
मैं समारोह escape :: String -> String
कि करने के लिए ऊपर स्ट्रिंग में परिवर्तित कर देंगे कैसे परिभाषित करते हैं:
"Newline: \n Tab: \t"
और सभी अन्य स्ट्रिंग शाब्दिक भागने दृश्यों के साथ एक ही ।
मैं अर्ध का हवाला देते हुए और खाका हास्केल उपयोग करने के साथ ठीक हूँ, लेकिन कैसे परिणाम प्राप्त करने के लिए उन्हें का उपयोग करने के पता नहीं है। कोई संकेतक?
अद्यतन: मैं बस Text.ParserCombinators.ReadP मॉड्यूल है कि बेस पुस्तकालय में शामिल है मिल गया। यह होता है कि जो मैं चाहता Data.Char में readLitChar :: ReadS Char
समारोह का समर्थन करता है, लेकिन मैं कैसे ReadP मॉड्यूल का उपयोग करने के लिए पता नहीं है। मैंने निम्नलिखित की कोशिश की और यह काम करता है:
escape2 [] = []
escape2 xs = case readLitChar xs of
[] -> []
[(a, b)] -> a : escape2 b
लेकिन यह रीडपी मॉड्यूल का उपयोग करने का सही तरीका नहीं हो सकता है। क्या कोई कुछ पॉइंटर्स प्रदान कर सकता है?
कोई अन्य अपडेट: सभी को धन्यवाद। नीचे मेरा अंतिम कार्य। बुरा नहीं, मुझे लगता है।
import Text.ParserCombinators.ReadP
import Text.Read.Lex
escape xs
| [] <- r = []
| [(a,_)] <- r = a
where r = readP_to_S (manyTill lexChar eof) xs
हो सकता है आप इस्तेमाल कर सकते हैं Haskell-src (http://hackage.haskell.org/ पैकेज/हैकेल-src) लेकिन शायद यह अधिक है ... अद्यतन: शायद (पढ़ें ("\" "++ s ++" \ "")) :: स्ट्रिंग –