আন্দ্রেজ বা নীলের ব্যাখ্যাগুলিতে কোনও কিছু যুক্ত করা শক্ত, তবে আমি এটির শট দেব। আমি অন্তর্নিহিত শব্দার্থবিজ্ঞান উদ্ঘাটিত না করে সিনট্যাকটিক দৃষ্টিকোণকে সম্বোধন করার চেষ্টা করতে যাচ্ছি, কারণ ব্যাখ্যাটি আরও প্রাথমিক এবং আমি আপনার প্রশ্নের আরও সুস্পষ্ট উত্তর দেব।
λ
গুরুত্বপূর্ণ উল্লেখ নিম্নলিখিত:
মেন্ডলার, এন (1991)। দ্বিতীয় আদেশের ল্যাম্বডা ক্যালকুলাসে প্ররোচিত ধরনের এবং প্রকারের সীমাবদ্ধতা। আমি অনলাইনে রেফারেন্স পাইনি আমি ভয় করি। বিবৃতি এবং প্রমাণগুলি অবশ্য নক্সের পিএইচডি গবেষণামূলক গবেষণায় (একটি সুপারিশযোগ্য পড়া!) পাওয়া যাবে।
খ- একটি ঘ
বি এ ডি = বি এ ডি →এ
একজন
λ x : বি এ ডি । x x : B a d → A
এবং তাই
( λ x : B a d । x x ) ( λ x : B a d । x x ) : ক
বি এ ডি =এফ( বি এ ডি )
এফ( এক্স)এক্সএফ( এক্স)
অবশ্যই আপনি সমীকরণীয়ভাবে সংজ্ঞায়িত ধরণের সাথে নয় তবে নির্মাণকারীর সাথে কাজ করছেন , যেমন আপনার আছে
data Bad = Pack (Bad -> A)
বরং কঠোর সাম্য। তবে আপনি সংজ্ঞা দিতে পারেন
unpack :: Bad -> (Bad -> A)
unpack (Pack f) = f
এই ফলাফল ধরে রাখার জন্য যা যথেষ্ট:
(\x:Bad -> unpack x x) (Pack (\x:Bad -> unpack x x))
একজন
আপনার দ্বিতীয় উদাহরণে জিনিসগুলি কিছুটা আরও জটিল, কারণ আপনার লাইনের সাথে সামান্য কিছু রয়েছে
বি এ ডি = বি এ ডি'→ এ
খ- একটি ঘ'খ- একটি ঘখ ক ডি ক বি এ ডি ( এন ও টি এ)
type Not a = a -> False
সঙ্গে
data Not a = Not a
যদি হাস্কেল এই ধরণের সংজ্ঞা দেয় তবে এটি সহজেই সমাধান করা হবে:
type Acc = Not Acc
এই ক্ষেত্রে, আপনি আগের মতো ঠিক একই পদ্ধতিতে লুপিং সংযোগকারী তৈরি করতে পারেন। আমার সন্দেহ হয় আপনি ব্যবহার করে অনুরূপ (তবে আরও জটিল) নির্মাণ চালিয়ে যেতে পারেন
data Acc = D (Not Acc)
এখানে সমস্যা হ'ল আইসোমরফিজম তৈরি করা
Bad Acc <-> Bad (Not Acc)
আপনি মিশ্র বৈকল্পিক সঙ্গে ডিল করতে হবে।