سؤال

ونشأ هذا السؤال أثناء قراءة فصل جديد في ممتاز تعلم أنت وهاسكل حول [فونكتورس] تطبيقية.

ووtypeclass تطبيقية لديها، وذلك كجزء من تعريف لربما المثال:

pure = Just

إذا كنت مجرد الذهاب الى GHCi وControl.Applicative الاستيراد، والقيام به:

pure (3+)

وأنا لا أحصل على أي شيء فقط (المنطقي). ولكن إذا كنت استخدامها في جزء من التعبير:

pure (3+) <*> Just 4

وأحصل فقط 7. أعتقد أنه هو أيضا لم يكن مفاجئا، ولكن أنا شيء مفقود لا يتجزأ عن كيفية عمل typeclasses، كما أعتقد، أنه لا يوجد أي غموض مع الدعوة إلى pure هنا.

إذا ارتباكي يجعل المعنى، يمكن لأحد أن يفسر ما يحدث في التفاصيل؟

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

المحلول

وانها مجرد اكتب الاستدلال. يتطلب المشغل (<*>) كل من الحجج لاستخدام المثال Applicative نفسه. الجانب الأيمن هو Maybe، وبالتالي فإن الجانب الأيسر يجب أن يكون Maybe أيضا. ولهذا كيف أنها شخصيات من أي مثيل يستخدم هنا. يمكنك أن تبحث في نوع من أي تعبير في مترجم عن طريق كتابة :t expression، وربما لو كنت مجرد الذهاب من خلال كل التعبير الجزئي وننظر إلى النوع الذي تم الاستدلال على ذلك، سوف تحصل على صورة أفضل عن ما يحدث.

نصائح أخرى

ومن الجدير بالنظر إلى نوع المترجم يستنتج لpure (3+):

Prelude Control.Applicative> :t pure (3+)
pure (3+) :: (Num a, Applicative f) => f (a -> a)

وطاقتها نوع من هذا المصطلح، وتأخر قرار حول فئة رقمية والطبقة تطبيقية حتى وقت لاحق. ولكن يمكنك فرض نوع معين مع الشرح، على سبيل المثال:

*Showfun Control.Applicative> pure (3+) :: Maybe (Double -> Double)
Just <function>

و(يعمل هذا لأن Showfun لديه إعلان المثيل الذي يطبع قيمة وظيفة كما <function>).

وانها مجرد مسألة وقت المترجم التي تراكمت لديها ما يكفي من المعلومات لاتخاذ قرار.

لتوسيع قليلا على الجواب newacct، وإذا لم يكن هناك ما يكفي من المعلومات لاستنتاج نوع الفعلي، يجوز للمترجم (في بعض الحالات) محاولة لتحديد نوع الافتراضي، تقتصر على تلك التي ترضي القيود نوع في السؤال . في هذه الحالة، ونوع الاستدلال هو IO (ن -> ن) لبعض مثيل من الصعب أن يحدد من الصيغة الرقميه => ن. GHCi ثم يقيم عليه ويلقي بعيدا قيمة الإرجاع، مع عدم وجود أثر واضح.

وهنا هو SO على نوع الاستدلال . لا هاسكل محددة، ولكن الكثير من الروابط الجيدة والاشياء لقراءة حول نوع الاستدلال في اللغات الوظيفية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top