unsafeVacuous
Data.Void.Unsafe
और .#
और #.
Data.Profunctor.Unsafe
दोनों में उन कार्यों का उपयोग करने के खतरों के बारे में चेतावनी दी गई है जो जीएडीटी हैं। कुछ खतरनाक उदाहरण स्पष्ट कर रहे हैं:बस जब असुरक्षित हैं, #।, और # असुरक्षित?
data Foo a where
P :: a -> Foo a
Q :: Foo Void
instance Functor Foo where
fmap f (P x) = P (f x)
fmap f Q = P (f undefined)
यहाँ, unsafeVacuous Q
एक फर्जी प्रकार के साथ एक Q
निर्माता का उत्पादन करेगा।
यह उदाहरण बहुत परेशान नहीं है क्योंकि यह एक समझदार Functor
उदाहरण की तरह दूरस्थ रूप से भी नहीं दिखता है। क्या ऐसे उदाहरण हैं जो करते हैं? विशेष रूप से, क्या उन उपयोगी लोगों का निर्माण करना संभव होगा जो मज़ेदार/प्रोफेसर कानूनों का पालन करते हैं जब केवल अपने सार्वजनिक एपीआई का उपयोग करके छेड़छाड़ की जाती है, लेकिन इन असुरक्षित कार्यों के चेहरे में भयंकर रूप से टूट जाती है?
उपरोक्त 'फू' के लिए मुझे लगता है कि कानून-पालन करने वाले मजेदार उदाहरण को तैयार करना असंभव है। मुझे आश्चर्य है कि किस प्रकार के जीएडीटी किसी को ऐसा करने की अनुमति देते हैं। ऐसा लगता है कि एक कन्स्ट्रक्टर 'K :: ... -> Foo T' किसी भी मज़ेदार उदाहरण को रोकता है जब तक कि' टी' एक प्रकार परिवर्तनीय न हो। (हो सकता है कि मैं कुछ दिख रहा हूं, यद्यपि ...) – chi