मैं आज Inverse of the absurd function पहले देखा था, और जब यह मेरे लिए स्पष्ट है कि drusba :: a -> Void
के किसी भी संभावित कार्यान्वयन को समाप्त कभी नहीं होगा है, मुझे समझ नहीं आता क्यों एक ही absurd :: Void -> a
का सच नहीं है (सभी के बाद, यह Void
निर्माण करने के लिए असंभव है)। GHC कार्यान्वयन पर विचार करें:Data.Void.absurd कैसे ⊥ से अलग है?
newtype Void = Void Void
absurd :: Void -> a
absurd a = a `seq` spin a where
spin (Void b) = spin b
spin
, यह मेरे लिए, अंतहीन Void
newtype रैपर की अनंत श्रृंखला को उजागर कर रहा है लगता है, और यहां तक कि कभी वापस नहीं लेंगे, जब आप एक Void
लगता है इसे पारित करने के सकता है। एक कार्यान्वयन कि पृथक किया जाएगा होगा कुछ की तरह:
absurd :: Void -> a
absurd a = a `seq` undefined
यह देखते हुए कि, क्यों हम कहते हैं कि absurd
एक उचित समारोह Data.Void में रहने के लिए योग्य है कि है, लेकिन
drusba :: a -> Void
drusba = undefined
एक है फ़ंक्शन जिसे संभवतः परिभाषित नहीं किया जा सकता है? क्या यह निम्नलिखित की तरह कुछ है?
absurd
कुल समारोह, जबकिdrusba
आंशिक है, (वास्तव में सभी) अपने डोमेन में आदानों कुछ के लिए नीचे परिणाम दे रहा है इसकी (खाली) डोमेन में किसी भी इनपुट के लिए एक गैर-नीचे परिणाम दे रही है।
नीचे वर्जित, बेतुका समारोह कभी नहीं बुलाया जाएगा। इसकी शायद ही आवश्यकता है, लेकिन इसके लिए उपयोग हैं। – augustss