আমি জ্যামিতিক বস্তুর জন্য এমন এক শ্রেণির সংজ্ঞা দিতে চাই যা একসাথে ছেদ করা যায়:
class Intersect a b c | a b -> c where
intersect :: a -> b -> c
-- Language extensions: -XMultiParamTypeClasses, -XFunctionalDependencies
ধারণাটি হ'ল একটি সাধারণ-উদ্দেশ্য ছেদ ফাংশন যা বিভিন্ন ধরণের জিনিসগুলি পরিচালনা করতে পারে। কেউ যেমন উদাহরণগুলি কল্পনা করতে পারে
instance Intersect Line Plane (Maybe Point) where
...
instance Intersect Plane Plane (Maybe Line) where
...
তবে আমি এটিও ঘোষণা করতে চাই যে ছেদটি পরিবর্তনশীল:
instance (Intersect a b c) => Intersect b a c where
intersect x y = intersect y x
-- Language extensions: -XUndecidableInstances
সমস্যাটি হ'ল আমি যখনই intersect x y
প্রথমে ফর্মের উদাহরণটি সংজ্ঞায়িত না করে মূল্যায়ন করি Intersect a b c
, কোথায় এটির a
প্রকার x
এবং b
এর প্রকার y
, প্রোগ্রামটি একটি অসীম লুপে চলে যায় , সম্ভবত পরিবহনের বিষয়ে পুনরাবৃত্ত উদাহরণের কারণে ঘটে caused আদর্শভাবে আমি intersect Egg Bacon
টাইপ-চেক করতে ব্যর্থ হওয়ার মতো কিছু চাই কারণ এ জাতীয় কোনও উদাহরণ সংজ্ঞায়িত হয়নি, আমাকে অসীম লুপে আটকাবেন না। আমি কীভাবে এটি বাস্তবায়ন করতে পারি?