मैं निरंतरता से अधिक जा रहा हूँ और मैं संरचना निरंतरता प्रकार के लिए दो अलग-अलग दृष्टिकोण का सामना करना पड़ा:निरंतरता प्रकार का निर्माण?
newtype C r a = C {runC :: (a -> r) -> r}
exampleFunction :: String -> C Bool String
exampleFunction s = C $ \t -> if length s > 10 then t s else False
continuationFunction :: String -> Bool
continuationFunction s = True
main = do
let suspendedFunc = exampleFunction "testing"
let completedFunc = runC suspendedFunc $ continuationFunction
दृष्टिकोण Poor Mans Concurrency में लिया बनाम:
type C r a = (a -> r) -> r
exampleFunction :: String -> C Bool String
exampleFunction s = \t -> if length s > 10 then t s else False
...
मैं समझता हूँ कि बाद दृष्टिकोण नहीं करता है एक स्पष्ट डेटा कन्स्ट्रक्टर का उपयोग नहीं करते हैं।
- इन दृष्टिकोणों के व्यावहारिक अंतर क्या हैं?
क्या यह प्रभाव तब होगा जब मैं इसे सामान्य प्रकार पर एक मोनड के साथ उपयोग करने का प्रयास करता हूं? जैसे:
data Hole = Hole1 Int | Hole2 String type C r m a = (a -> m r) -> m r exampleFunction :: String -> C Bool Maybe Hole exampleFunction s = \t -> do x <- t (Hole1 11) y <- t (Hole2 "test") ... continuationFunction :: Hole -> Bool continuationFunction (Hole1 x) = False continuationFunction (Hole2 y) = True
अंतर 'प्रकार' और 'newtype' के बीच सामान्य अंतर हैं। 'प्रकार' समानार्थी मौजूदा प्रकार के लिए सिर्फ एक नया नाम हैं; उन्हें आंशिक रूप से लागू नहीं किया जा सकता है और आप उन्हें कक्षा का 'उदाहरण' नहीं बना सकते हैं। 'न्यूटाइप' वे टाइप किए गए प्रकार से अलग हैं और आप कस्टम 'इंस्टेंस' लिखने के लिए उनका उपयोग कर सकते हैं। उदाहरण के लिए आपको 'टाइप सी' के लिए' मोनाड 'का एक उदाहरण लिखने में परेशानी होगी। –
धन्यवाद @ बेंजामिन होडसन - क्या आप एक उत्तर में बनाना चाहते हैं और मैं स्वीकार करूंगा? –