2012-03-11 30 views
14

मैं http://www.algorithm.com.au/downloads/talks/monads-are-not-scary/monads-are-not-scary-chak.pdfडीबगिंग को सरल बनाने के लिए आईओ को फिर से परिभाषित करें?

और लगभग लगभग स्लाइड पर जा रहा हूं। डेक के माध्यम से 75% रास्ते बुलेट प्वाइंट है "डीबगिंग को सरल बनाने के लिए आईओ को फिर से परिभाषित करें!"

यह एक बहुत ही दिलचस्प विचार की तरह दिखता है! क्या कोई व्यक्ति व्यावहारिक उदाहरण दे सकता है कि स्पीकर किस बारे में बात कर रहा है?

उत्तर

10

ठीक है, अगर आईओ के बजाए, तो आपने एक मोनैड का उपयोग किया जो पूरी तरह से नियंत्रित और निर्धारित वातावरण के साथ I/O अनुकरण करता है? आप आसानी से उन "आईओ" कार्यों का परीक्षण कर सकते हैं जैसे कि वे शुद्ध कार्य थे। इस उदाहरण IOSpec, जो आप ठीक प्रभाव किस तरह आप अपने नकली आईओ में अनुमति देना चाहते हैं निर्दिष्ट करने की अनुमति देकर भी आगे चला जाता है के लिए के पीछे विचार यह है कि आप लिख सकते हैं:

myFunction :: a -> b -> IOSpec (Teletype :+: IORefS) 
myFunction x y = do 
    ... 
    putStr (...) 
    ref <- newIORef ... 
    ... 

(टेलिटाइप टर्मिनल कार्यों के लिए अनुमति देते हैं संदर्भ के लिए IORefS) और उसके बाद इनपुट और आउटपुट पर पूर्ण नियंत्रण के साथ या यहां तक ​​कि जीएचसीआई में चरणबद्ध कदम के साथ एक त्वरित जांच संपत्ति में अपने फ़ंक्शन का परीक्षण करें (VM मॉड्यूल और runIOSpec देखें)। और यदि यह सही तरीके से काम करता है, तो बस टेस्ट। IOSpec.Surrogate पेश करने के लिए आयात को बदलें जो IOSpec f को IO के समानार्थी के रूप में परिभाषित करता है।

संबंधित मुद्दे