এখানে দৃশ্যধারণ করা হয়েছে: আমি একটি টাইপ স্বাক্ষর সহ কিছু কোড লিখেছি এবং জিএইচসি অভিযোগ করেছেন যে কিছু x
এবং এর জন্য x ~ y কে ছাড় করতে পারেনি y
। আপনি সাধারণত জিএইচসিকে একটি হাড় নিক্ষেপ করতে পারেন এবং কেবল ফাংশন সীমাবদ্ধতায় আইসোমরফিজম যুক্ত করতে পারেন তবে বেশ কয়েকটি কারণে এটি একটি খারাপ ধারণা:
- এটি কোড বোঝার উপর জোর দেয় না।
- আপনি ৫ টি বাধা দিয়ে শেষ করতে পারেন যেখানে একজনের যথেষ্ট হবে (উদাহরণস্বরূপ, যদি ৫ টি আরও একটি নির্দিষ্ট সীমাবদ্ধতার দ্বারা বোঝানো হয়)
- আপনি যদি কিছু ভুল করে থাকেন বা জিএইচসি যদি সহায়তা না করে থাকেন তবে আপনি জালিয়াতির সীমাবদ্ধতাগুলি শেষ করতে পারেন
আমি শুধু কয়েক ঘন্টা অতিবাহিত battling ক্ষেত্রে 3. আমি খেলছি syntactic-2.0
, এবং আমি একটি ডোমেন স্বাধীন সংস্করণ সংজ্ঞায়িত করার চেষ্টা ছিল share
, সংস্করণ সংজ্ঞায়িত অনুরূপ NanoFeldspar.hs
।
আমার এটি ছিল:
{-# LANGUAGE GADTs, FlexibleContexts, TypeOperators #-}
import Data.Syntactic
-- Based on NanoFeldspar.hs
data Let a where
Let :: Let (a :-> (a -> b) :-> Full b)
share :: (Let :<: sup,
Domain a ~ sup,
Domain b ~ sup,
SyntacticN (a -> (a -> b) -> b) fi)
=> a -> (a -> b) -> a
share = sugarSym Let
এবং জিএইচসি could not deduce (Internal a) ~ (Internal b)
, যা অবশ্যই আমি যাচ্ছিলাম তা নয়। সুতরাং হয় আমি কিছু কোড লিখেছিলাম যা আমার উদ্দেশ্য ছিল না (যা সীমাবদ্ধতার প্রয়োজন), বা জিএইচসি আমার সীমাবদ্ধভাবে লিখেছিল এমন কিছু প্রতিবন্ধকতার কারণে সেই সীমাবদ্ধতা চেয়েছিল।
দেখা যাচ্ছে যে আমাকে (Syntactic a, Syntactic b, Syntactic (a->b))
বাধা তালিকায় যুক্ত করা দরকার , যার মধ্যে কোনওটিই বোঝাচ্ছে না (Internal a) ~ (Internal b)
। আমি মূলত সঠিক বাধা নিয়ে হোঁচট খেয়েছি; তাদের সন্ধান করার মতো পদ্ধতিগত উপায় এখনও আমার কাছে নেই।
আমার প্রশ্নগুলি হ'ল:
- জিএইচসি কেন এই সীমাবদ্ধতার প্রস্তাব দিয়েছে? সিনথেটিকের কোথাও কোনও বাধা নেই
Internal a ~ Internal b
, তাই জিএইচসি কোথা থেকে এটিকে টানল? - সাধারণভাবে, জিএইচসি বিশ্বাস করে যে এটি প্রয়োজন বলে মনে করে এমন একটি প্রতিবন্ধকতার উত্স সনাক্ত করতে কোন কৌশল ব্যবহার করা যেতে পারে? এমনকি আমি নিজেকে আবিষ্কার করতে পারি এমন প্রতিবন্ধকতাগুলির জন্য , আমার পদ্ধতির মূলত শারীরিকভাবে পুনরাবৃত্ত সীমাবদ্ধতাগুলি লিখে আপত্তিকর পথটি জোর করা উচিত। এই পদ্ধতির মূলত প্রতিবন্ধকতাগুলির একটি অসীম খরগোশের গর্ত নিচে চলেছে এবং আমি কল্পনা করতে পারি এমন সবচেয়ে কম দক্ষ পদ্ধতি সম্পর্কে।
a
এবং b
আবদ্ধ - আপনার প্রসঙ্গে বাইরের স্বাক্ষরের প্রকারটি দেখুন - a -> (a -> b) -> a
না a -> (a -> b) -> b
। এটা কি তাই? সীমাবদ্ধ সমাধানকারীদের সাথে, তারা যে কোনও জায়গায় ট্রানজিটিভ সাম্যকে প্রভাবিত করতে পারে , তবে ত্রুটিগুলি সাধারণত কোনও অবস্থানকে "কাছাকাছি" দেখায় যেখানে সীমাবদ্ধতা প্ররোচিত হয়েছিল। @ জোজেফগ যদিও এটি দুর্দান্ত হবে - ট্যাগ বা কোনও কিছু দিয়ে সীমাবদ্ধতাগুলি বোধগম্য করে, কোথা থেকে এসেছে তা দেখানোর জন্য? : s