2010-12-21 21 views
8

मुझे इस प्रकार के हस्ताक्षर को समझने में मदद की ज़रूरत है जो कि थ्रीस्ट पैकेज से है।एक जटिल प्रकार हस्ताक्षर को समझना

import Prelude hiding ((.), id) 
import Control.Category 
import Data.Monoid 
import Control.Arrow 
import Control.Monad 

foldlThirst :: (forall j k . (a +> j) -> (j ~> k) -> (a +> k)) 
       -> (a +> b) 
       -> Thrist (~>) b c 
       -> (a +> c) 

मैं कई चीजों के बारे में उलझन में हूं।

पहले +> और ~> प्रतीकों क्या हैं? वे कहां दस्तावेज हैं और उन्हें क्या कहा जाता है?

लेकिन मेरा भ्रम वहां रुक जाता है। मुझे एहसास है कि मात्रा तीसरे के प्रकारों के धागे का वर्णन कर रही है, लेकिन मुझे यकीन नहीं है कि पहले तर्क, या पूरे समारोह के लिए संबंध रखने वाले रिश्ते का वर्णन किया गया है, या कौन जानता है ...

अन्य मामलों में जहां मैंने अस्तित्व में मात्रा देखी है, वाक्यांश एक अवधि के साथ समाप्त होता है, लेकिन यहां यह समाप्त होता है ->, क्या यह महत्वपूर्ण है?

उत्तर

8

पहले +> और ~> प्रतीकों क्या हैं? वे कहां दस्तावेज हैं और उन्हें क्या कहा जाता है?

वे इंफिक्स पहचानकर्ता हैं, जैसे कि आपने उन्हें फ़ंक्शन के नाम के रूप में उपयोग किया है। उसी टोकन द्वारा, लोअरकेस पहचानकर्ताओं के समतुल्य होने के नाते (: से शुरू होने वाले ऑपरेटरों के विपरीत जो कि ऊपरी-मामले अल्फान्यूमेरिक पहचानकर्ताओं के बराबर हैं), एक प्रकार के हस्ताक्षर में वे केवल प्रकार चर हैं। दूसरे शब्दों में, यह इस के बराबर है:

(forall j k . (f a j) -> (g j k) -> (f a k)) 
    -> etc . . . 

लेकिन मेरी भ्रम को रोकने के है। मुझे लगता है कि मात्रा Thrist के प्रकार के सूत्रण का वर्णन है, लेकिन मुझे यकीन है कि अगर एक रिश्ता है कि पहला तर्क लिए रखती है, या पूरे समारोह, या कौन जानता है वर्णन है नहीं कर रहा हूँ ...

स्पष्ट क्वांटिफायर केवल संलग्न कोष्ठक के भीतर, या अभिव्यक्ति के अंत में स्कॉप्ड होते हैं। इस मामले में, वे केवल पहले तर्क का वर्णन करते हैं, क्योंकि पेश किए गए प्रकार चर केवल उस तर्क के दायरे में हैं।

इस मामले में, इसका मतलब यह है कि पहले तर्क के रूप में दिया गया कार्य उन प्रकारों में पूरी तरह से बहुलक होना चाहिए। उदाहरण के तौर पर, एक फ़ंक्शन जिसका प्रकार हस्ताक्षर (a -> a) -> ... से शुरू होता है not को इसके पहले तर्क के रूप में aBool के साथ एकीकृत किया जा सकता है। इसके विपरीत, यदि टाइप हस्ताक्षर (forall a. a -> a) -> ... के साथ शुरू हुआ है तो उसे एक ऐसे फ़ंक्शन की आवश्यकता होगी जो सभी संभावित प्रकार a के लिए काम करे, केवल ऐसा फ़ंक्शन id है।

+0

मुझे लगता है कि मुझे यह मिल गया है। आपके द्वारा शुरू किए गए बाकी प्रकार के हस्ताक्षर होंगे: (एफ ए बी) -> थ्रिस्ट जी बी सी -> (एफ ए सी)। यदि ऐसा है तो मुझे लगता है कि वे आसानी से $>, आदि हो सकते हैं। –

+0

@ जोनाथन फिशॉफ: हाँ। इस्तेमाल किए गए प्रतीकों को केवल सुझाव दिया जाता है, 'प्रकार' चर के पारंपरिक उपयोग की तरह 'मोनाड' का उदाहरण होने की अपेक्षा की जाती है। –

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