Prelude
में परिभाषित किया जाता है,
type ShowS = String -> String
class Show a where
showsPrec :: Int -> a -> ShowS
show :: a -> String
showList :: [a] -> ShowS
type ReadS a = String -> [(a, String)]
class Read a where
readsPrec :: Int -> ReadS a
readList :: ReadS [a]
read :: (Read a) => String -> a
संक्षेप में, इन हास्केल में मानक "क्रमबद्धता" तरीके हैं। show :: (Show a) => a -> String
एक स्ट्रिंग में कुछ भी Show
का एक उदाहरण है कि कर सकते हैं और read :: (Read a) => String -> a
कुछ भी Read
का एक उदाहरण है कि में एक स्ट्रिंग कर देते हैं (या एक अपवाद फेंक) कर सकते हैं।
मानक पुस्तकालय में अधिकांश अंतर्निहित प्रकार और डेटा संरचनाओं में Show
और Read
उदाहरण परिभाषित किए गए हैं; यदि आप उन लोगों से भागों लिखेंगे, तब अपने प्रकार भी Show
और Read
उदाहरणों में परिभाषित किया गया है।
type Table = [(String, String)]
load :: (Read a) => FilePath -> IO a
load f = do s <- readFile f
return (read s)
save :: (Show a) => a -> FilePath -> IO()
save x f = writeFile f (show x)
तो Table
एक डेटाप्रकार थे, तो आप उदाहरण के लिए पूछने के लिए है, लेकिन आप अनुरोध कर सकते हैं संकलक उन्हें आपके लिए स्वचालित निकाले जाते हैं।
data Table = Table [(String, String)]
deriving (Read, Show)
कभी-कभी यह संभव नहीं है और आपको अपने स्वयं के उदाहरण परिभाषित करना होगा।
instance Show Table where
showsPrec p x = ...
instance Read Table where
readsPrec p x = ...
लेकिन यह सामान्य नहीं होना चाहिए।
बाइनरी प्राप्त करने के लिए, http://repetae.net/computer/haskell/DrIFT/ दिमाग में आता है। ऐसा कहा जा रहा है, यह निश्चित रूप से संभव है कि इस सरल मामले में रेवलिस्ट के लिए स्मार्ट पढ़ें और दिखाएं, और मैं सहमत हूं कि ओपी को तब तक सरल रहना चाहिए जब तक स्केलेबिलिटी कोई समस्या न हो जाए। – ephemient