मैंने =:=
का उपयोग उदाहरण के रूप में सरल न्यूनतम उदाहरण बनाने के उद्देश्य से लैम्ब्डा टाइप किया।टाइप लैम्ब्डा को सही तरीके से परिभाषित करने के लिए कैसे करें?
=:=
प्रकार दो तर्क लेते हैं, मैं एक प्रकार के स्तर पर करी करना चाहता हूं।
मैं अनुभवहीन कार्यान्वयन type Curry[G] = {type l[L] = L =:= G}
ले लेकिन व्यावहारिक में यह त्रुटियों का कारण बनता उपयोग करता है:
type X = Int
type Y = Int
type CurryInt[T] = T =:= Int
type Curry[G] = {type l[L] = L =:= G}
type CurrStatic = {type l[L] = L =:= Int}
object CurryObj {type l[L] = L =:= Int}
trait Apply[P[_], T]
implicit def liftApply[P[_], T](implicit ev : P[T]) = new Apply[P,T] {}
implicitly[Apply[CurryInt, Y]] // ok
implicitly[Apply[Curry[X]#l, Y]] // fails
implicitly[Apply[Curry[X]#l, Y]](liftApply) // fails
implicitly[Apply[Curry[X]#l, Y]](liftApply[Curry[X]#l, Y]) // ok
implicitly[Apply[CurrStatic#l, Y]] // fails
implicitly[Apply[CurryObj.l, Y]] // ok
प्रकार निष्कर्ष यहाँ टूट जाता है। इसे काम करने के लिए मुझे लैम्बडास को कैसे परिभाषित करना चाहिए?
जल्द ही: प्रकार प्रक्षेपण का उपयोग नहीं करता है।टाइप घोषणा को अनबाउंड वैरिएबल रखने की अनुमति है – ayvango
आप अपनी आवश्यकताओं के अनुसार विशिष्ट नहीं थे, हालांकि यह समाधान संकलित करता है कि आप 'प्रक्षेपण प्रक्षेपण' के साथ क्यों जाने का प्रयास कर रहे हैं? क्या यह सिर्फ एक अभ्यास है? – pedromss
मैं अनजान था कि टाइप अभिव्यक्ति में अनबाउंड प्रकारों की अनुमति है। तो मैंने टाइप स्तर में 'λx.λy.x == y' जैसे कुछ एन्कोड करने का प्रयास किया। मैं कल्पना नहीं कर सका कि सरल 'λx.x == y' सही स्केल अभिव्यक्ति होगी। – ayvango