2017-04-07 8 views
7

मैंने हाल ही में हैकेज पर मूल पुस्तकालयों को देखना शुरू किया, और एक आवर्ती मुहावरे है जिसे मैं समझ नहीं पा रहा हूं।एसटी मोनड घोषणा के सिंटैक्स

instance Monad (ST s) where 
    {-# INLINE (>>=) #-} 
    (>>) = (*>) 
    (ST m) >>= k 
     = ST (\ s -> 
     case (m s) of { (# new_s, r #) -> 
     case (k r) of { ST k2 -> 
     (k2 new_s) }}) 

विशेष रूप से, मैं (# new_s, r #) समझ में नहीं आता: यहाँ ST module से एक उदाहरण है। मुझे लगता है कि दूसरा हैश एक अनबॉक्स किए गए मान को संदर्भित करता है, लेकिन शेष मेरे लिए एक रहस्य है (संभवतः "नया राज्य" के साथ कुछ करने के लिए)।

उत्तर

7

(# x, y, z #) तीन तत्वों के साथ एक अनबॉक्सित टुपल है। https://downloads.haskell.org/~ghc/6.8.3/docs/html/users_guide/primitives.html पर "8.2.2। अनबॉक्स किए गए टुपल्स" देखें।

शेष मूल रूप से केवल राज्य का कार्यान्वयन है।

+3

सामान्यतः, '# 'हास्केल में इसका मतलब है कि यह कुछ प्रकार के निम्न स्तर और/या आदिम सामान कर रहा है। नामों में '#' का उपयोग करने के लिए आपको 'MagicHash' भाषा एक्सटेंशन को सक्षम करना होगा। – Lazersmoke

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