سؤال

إذا قمت بإنشاء وحدة نمطية AModule مع typeclass Foo,

module AModule where
class Foo a where
   bar :: a

وفي وحدة أخرى BModule يستورد AModule مؤهل ومحاولة جعل نوع نوع من المثيل Foo, ، بمعنى آخر

module B where
import qualified AModule as A
instance A.Foo Int where
   A.bar = 0

يخبرني GHC "الاسم المؤهل في وضع الربط: A.Bar".

من ما أفهمه ، يرتبط هذا تذكرة GHC 3197, ، والتي تم تصنيفها على أنها ثابتة. أنا أقوم بتشغيل GHC 6.12.1 وما زلت أحصل على الخطأ. هل أنا فقط أسيء فهم شيء هنا؟

هل كانت مفيدة؟

المحلول

أنت لا تحتاج إلى A. داخل إعلان المثيل (انظر تقرير هاسكل 98 §4.3.2).

ما يلي يجمع في 6.12.3:

instance A.Foo Int where    -- # A. here
   bar = 0                  -- # no A. here

main = print (A.bar :: Int) -- # A. here
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top