मैंने अपने सिर को मोनाड्स के चारों ओर लपेट लिया है (कम से कम मुझे लगता है कि मेरे पास है) और अधिक विशेष रूप से राज्य मोनैड, जो कुछ लोग बुद्धिमान हैं, तो मुझे पता चला है, इसलिए मैं शायद यह प्रश्न।राज्य मोनाड, क्यों नहीं एक ट्यूपल?
वैसे भी, राज्य इकाई आम तौर पर एक एम के साथ लागू किया गया है < 'एक> की तरह इस (एफ #) कुछ के रूप में:
type State<'a, 'state> = State of ('state -> 'a * 'state)
अब मेरे सवाल: वहाँ किसी भी कारण है कि आप एक टपल उपयोग नहीं कर सका है यहाँ? अन्य तो MonadA<'a, 'b>
और MonadB<'a, 'b>
के बीच संभावित अस्पष्टता जो दोनों ('a * 'b)
टुपल के बराबर बन जाएंगी।
संपादित करें: स्पष्टता के लिए उदाहरण जोड़ा
type StateMonad() =
member m.Return a = (fun s -> a, s)
member m.Bind(x, f) = (fun s -> let a, s_ = x s in f a s_)
let state = new StateMonad()
let getState = (fun s -> s, s)
let setState s = (fun _ ->(), s)
let execute m s = m s |> fst
प्रश्न क्या है? एक टुपल का प्रयोग करें जहां? फ़ंक्शन का रिटर्न प्रकार एक टुपल है। – Brian
कोई भी राज्य प्रकार के बजाय एक tuple का उपयोग नहीं करें और बस एक राज्य के बजाय एक समारोह वापस। – thr