2010-02-15 22 views
16

मैं mtl लाइब्रेरी का अध्ययन कर रहा हूं और अपने स्वयं के कुछ MonadTransformers करने की कोशिश कर रहा हूं। मैं Control.Monad.State.StateT घोषणा जाँच किया गया था, और सभी कोड के पार, मैं इस वाक्य रचना देखें:हास्केल में `~` क्या मतलब है?

execStateT :: (Monad m) => StateT s m a -> s -> m s 
execStateT m s = do 
    ~(_, s') <- runStateT m s 
    return s' 

इस ~ संकार्य क्या मतलब है?

उत्तर

14

यह हास्केल में आलसी पैटर्न के लिए संकेत है। मैं नहीं कह सकता कि मैं इसे लेकिन from here से परिचित हूँ:

यह एक आलसी पैटर्न कहा जाता है, और प्रपत्र ~ पैट है। आलसी पैटर्न अपरिवर्तनीय हैं: पेट के बावजूद ~ pat हमेशा सफल होता है, के खिलाफ एक मूल्य v मिलान करता है। प्रचालन बोल, अगर पैट में एक पहचानकर्ता बाद में दाएँ हाथ की ओर पर "पुराना" है, यह मूल्य है कि परिणाम होगा अगर वी थे सफलतापूर्वक पैट मैच के लिए के उस भाग के लिए बाध्य किया जाएगा, और ⊥ अन्यथा।

इसके अलावा, this section उपयोगी हो सकता है।

4

यह बराबर है

execStateT m s = do 
    r <- runStateT m s 
    return (snd r) 

या

execStateT m s = 
    runStateT m s >>= return . snd 
7

एक सामान्य पैटर्न मैच के लिए, करने के लिए मूल्य है कि मिलान किया जाना चाहिए की जरूरत है, मूल्यांकन किया जाना इतना है कि यह पद्धति के खिलाफ तुलना की जा सकती।

~ आलसी पैटर्न मिलान को दर्शाता है: यह माना जाता है कि मान पैटर्न से मेल खाता है। मैच तब बाद में किया जाता है, यदि मिलान किए गए चर का मान वास्तव में उपयोग किया जाता है।

संबंधित मुद्दे