জিএইচসি টাইপড গর্তগুলির টাইপ শ্রেণীর সীমাবদ্ধতা দেওয়ার কোনও উপায় আছে কি?


103

বর্তমান আচরণ

Prelude> show _

<interactive>:7:6:
    Found hole ‘_’ with type: a0
    Where: a0 is an ambiguous type variable
    Relevant bindings include it :: String (bound at <interactive>:7:1)
    In the first argument of show’, namely ‘_’
    In the expression: show _
    In an equation for it’: it = show _

পছন্দসই আচরণ

জিএইচসি আমাকে এও বলবে যে টাইপড গর্তটিতে Showটাইপ শ্রেণীর বাধা রয়েছে।

বিবিধ

জিএইচসি সংস্করণ 7.8.1


16
আফাইক, এটি বর্তমানে সম্ভব নয় তবে এটি অবশ্যই কার্যকর হবে। এর জন্য জিএইচসি বাগ ট্র্যাকারে একটি বৈশিষ্ট্য অনুরোধ খোলার উপযুক্ত হতে পারে।
kosmikus

11
আমি সম্মত হই যে এটি কার্যকর হবে। আমি এটি জিএইচসি ট্র্যাকটিতে
ডোমিনিক ডিভরিস

4
এখন আপনি ব্যবহার করতে পারে প্রাক-টাইপ-গর্ত কৌতুক: show (undefined :: () -> ()); টাইপ-চেক ত্রুটির ক্ষেত্রে জিএইচসি আরও জানাবে।
ফডেজ

1
এটি কি কোনও বৈশিষ্ট্যের অনুরোধ, বা একটি আসল প্রশ্ন? এটি হ'ল, আপনি কি নিশ্চিতভাবে জানেন যে আপনার পছন্দমতো জিএইচসি করার কোনও উপায় নেই, বা বর্তমান সংকলকটি দিয়ে আপনি যা চান তা পেতে পারেন এমন সম্ভাবনা রয়েছে, তবে কীভাবে আপনি নিশ্চিত নন?
স্টাকেক্স - আর

1
@ স্টাকেক্স এটি উভয়েরই একটি বিষয়। মূলত যখন আমি এই প্রশ্নটি লিখেছিলাম তখন আমি বিভ্রান্ত হয়ে পড়েছিলাম কেন জিএইচসি ধরণের শ্রেণির সীমাবদ্ধতা সরবরাহ করে না, এবং আমি ভেবেছিলাম যে আমি টাইপড গর্তগুলি ভুল ব্যবহার করছি। তারপরে কেউ কেউ আমাকে বলেছিল যে বর্তমানে এটি করা সম্ভব নয় তবে জিএইচসিতে যোগ করা যেতে পারে। সুতরাং আমি আশা করি এটি শীঘ্রই যুক্ত করা হবে। অনেকে মনে হয় এটি ব্যবহার করতে চান। ফাদেজের কৌশলটি সময়ে সময়ে কাজ করে বলে মনে হচ্ছে তবে এটি কোনও টাইপড হোল ভিত্তিক সমাধান হিসাবে মার্জিত বা সহজেই ব্যবহারযোগ্য নয়।
উইজেক

উত্তর:


2

এটি এখন @ ডমিনিকডেভারিজের জিএইচসি টিকিটের জন্য জিএইচসি 8.0 এ স্থির হয়েছে ।

বর্ধিত ধরণের ডিফল্টর কারণে , এটি GHCi এ তাত্ক্ষণিকভাবে স্পষ্ট নয়। আপনার উদাহরণ সহ,

> show _

  <interactive>:7:6: error:
     Found hole: _h :: ()
      Or perhaps ‘_h is mis-spelled, or not in scope
     In the first argument of show’, namely ‘_h
      In the expression: show _h
      In an equation for it’: it = show _h
     Relevant bindings include
        it :: String (bound at <interactive>:7:1)

গর্তের ধরণটি ডিফল্ট হয় ()। এটি স্পষ্টতই কাঙ্ক্ষিত আচরণ , যদিও যুক্তি তৈরি করার যুক্তি রয়েছে যে বর্ধিত ডিফল্টিংটি গর্তের ক্ষেত্রে প্রযোজ্য হবে না (তাদের সাধারণ ব্যবহার হিসাবে সংকলকটি আপনাকে inferred টাইপটি জানাতে হয়)।

তবুও, আপনি যদি GHC দিয়ে সংকলন করেন বা GHCi- এর মাধ্যমে বর্ধিত ডিফল্ট নিয়মগুলি অক্ষম করেন :set -XNoExtendedDefaultRules, আমরা উন্নতির ফলাফল দেখতে পাচ্ছি:

<interactive>:3:1: error:
     Ambiguous type variable a0 arising from a use of show
      prevents the constraint ‘(Show a0)’ from being solved.
      Probable fix: use a type annotation to specify what a0 should be.
      These potential instances exist:
        instance Show Ordering -- Defined in ‘GHC.Show’
        instance Show Integer -- Defined in ‘GHC.Show’
        instance Show a => Show (Maybe a) -- Defined in ‘GHC.Show’
        ...plus 22 others
        ...plus 11 instances involving out-of-scope types
        (use -fprint-potential-instances to see them all)
     In the expression: show _
      In an equation for it’: it = show _

<interactive>:3:6: error:
     Found hole: _ :: a0
      Where: a0 is an ambiguous type variable
     In the first argument of show’, namely ‘_’
      In the expression: show _
      In an equation for it’: it = show _
     Relevant bindings include
        it :: String (bound at <interactive>:3:1)

1

বর্তমানে এটি সম্ভব নয় ut তবে জল্পনা অনুযায়ি এটি জিএইচসিতে যুক্ত হতে পারে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.