तो वहाँ हास्केल में एक पुस्तकालय spoon मुझे इसहैस्केल में चम्मच असुरक्षित है?
safeHead :: [a] -> Maybe a
safeHead = spoon . head
करने की सुविधा देता है जो कहा जाता है, लेकिन यह भी मुझे इस
>>> spoon True :: Maybe Bool
Just True
>>> spoon (error "fork") :: Maybe Bool
Nothing
>>> spoon undefined :: Maybe Bool
Nothing
>>> spoon (let x = x in x) :: Maybe Bool
<... let's just keep waiting...>
जो कुछ मामलों में वास्तव में उपयोगी लगता है अपना काम करने दिया, लेकिन यह भी denotational अर्थ विज्ञान का उल्लंघन करती है (मेरी समझ के लिए) क्योंकि यह मुझे ⊥
के अर्थपूर्ण preimage में विभिन्न चीजों के बीच अंतर करने देता है। यह throw
/catch
से सख्ती से अधिक शक्तिशाली है क्योंकि उनके पास निरंतरता द्वारा परिभाषित एक अर्थशास्त्र है।
>>> try $ return (error "thimble") :: IO (Either SomeException Bool)
Right *** Exception: thimble
तो मेरा सवाल है: क्या कोई व्यक्ति सुरक्षा प्रकार तोड़ने के लिए दुर्भावनापूर्ण रूप से चम्मच का उपयोग कर सकता है? क्या खतरे के लायक सुविधा है? या, वास्तव में, क्या कोई उचित तरीका है कि इसका उपयोग किसी प्रोग्राम के अर्थ में किसी के आत्मविश्वास को खराब कर सकता है?
आप किस खतरे के बारे में बात करते हैं? वह एक शुद्धवादी डरावनी हो सकता है? –
अच्छा सवाल, ऐसा लगता है कि यह वास्तव में उपयोगी हो सकता है। –
@RobertHarvey किसी भी खतरे में नहीं हो सकता है, लेकिन कई बार आपको लगता है कि शुद्धता के उल्लंघन से मॉड्यूल encapsulation के आसपास व्यवहार या चाल के बारे में गलत उम्मीदों का कारण बनता है।मैं वास्तविक कोड में 'चम्मच' का उपयोग करने से खुश हूं (मैं पहले से ही करता हूं) लेकिन मैंने आज देखा कि यह हास्केल अर्थशास्त्र का उल्लंघन करता है। –