2017-05-25 6 views
10

मैं समझता हूँ कि (->) a तरह * -> * के एक उच्च आदेश प्रकार है, कि जब एक प्रकार तर्क b के लिए लागू प्रकार a -> bक्या मैं एक -> बी -> * के लिए उच्च आदेश प्रकार लिख सकता हूं?

मैं तरह * -> * का एक प्रकार है कि जब c के लिए आवेदन किया a -> b -> c देना होगा लिख ​​सकते हैं देता है?

यदि नहीं, तो क्यों नहीं? शायद कुछ भाषा एक्सटेंशन और forall का उपयोग कर रहे हैं?

(<*>) :: Applicative t => t (c -> d) -> t c -> t d 

(<*>) :: (a -> b -> c -> d) -> (a -> b -> c) -> a -> b -> d 

यह बाइनरी (curried) कार्यों के लिए एक Combinator के रूप में उपयोगी होगा:

यह मैं functor और अनुप्रयोगी (और अन्य वर्गों) जहां functorial संरचना "a -> b ->" है के उदाहरण के रूप में लिखने में दिया जाएगा ।

एनबी। शायद यह Functors and Applicatives for types of kind (* -> *) -> * से संबंधित है लेकिन मुझे यकीन नहीं है, क्योंकि यह मेरे सिर पर चला गया :-)

उत्तर

11

नहीं, आप नहीं कर सकते। आप इसका समर्थन करने के लिए कई भाषा विशेषताओं की कल्पना कर सकते हैं; जैसे प्रकार स्तरीय lambdas एक प्राकृतिक एक होगा:

instance Functor (\c. a -> b -> c) where ... 

दुर्भाग्य से, प्रकार स्तरीय lambdas मतलब होगा हम प्रकार निष्कर्ष है, जो विशेष रूप से मुश्किल है के दौरान उच्च क्रम एकीकरण के लिए पहले क्रम एकीकरण से आगे बढ़ना है। (मैं अपने सिर के ऊपर से अपरिहार्य कहना चाहता हूं, लेकिन मुझे इसके बारे में निश्चित नहीं है।)

यदि आप newtype रैपर के माध्यम से एक स्पष्ट प्रकार-जांच संकेत डालते हैं तो आप आधा रास्ते प्राप्त कर सकते हैं। मानक एक Compose है:

a -> b -> c ~= Compose (a ->) (b ->) c 
\c. a -> b -> c ~= Compose (a ->) (b ->) 

और, वास्तव में, Compose (a ->) (b ->) के लिए Functor और Applicative उदाहरणों वास्तव में हैं जिन्हें आप \c. a -> b -> c के लिए उम्मीद करेंगे, वाक्यात्मक शोर का एक सा की कीमत पर कर रहे हैं बनाने और उपभोक्ता इस के मूल्यों जब प्रकार।

+0

ऐसी भाषा के उदाहरण के लिए, एग्डा में टाइप-लेवल (और दयालु, आदि) फ़ंक्शन हैं। – zbw

+0

धन्यवाद। अब यह सब बहुत स्पष्ट है। रचना का उपयोग करके मैं फंक्टर और आवेदक का उपयोग करके द्विआधारी कार्यों को गठबंधन करने में सक्षम था: 'प्राप्त करें ((,) <$> लिखें (+) <*> लिखें (-)) 7 2' = '(9,5)' – Tobia

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