2014-06-22 8 views
6

आलेख Scrap your type classes पढ़ने के बाद, मैंने दिखाए गए कुछ विचारों को दोबारा लागू किया। ऐसा करने के दौरान मैं वास्तव में कुछ अजीब आया: प्रकार वर्ग - प्रकार को एक प्रकार की बाधा के रूप में उपयोग किया जा सकता है! मेरा सवाल: वह क्यों है?कक्षा डेटा प्रकार टाइप करें

मेरे कोड:

{-# LANGUAGE Rank2Types #-} 

data IFunctor f = IFunctor { 
    _fmap :: forall a b. (a -> b) -> f a -> f b 
} 

-- this type checks... 
_fmap2 :: IFunctor f => (a -> b) -> f (f a) -> f (f b) 
_fmap2 = \inst -> _fmap inst . _fmap inst 

GHCi में निम्नलिखित बात होता है:

>>> :t _fmap2 :: IFunctor f => (a -> b) -> f (f a) -> f (f b) 
_fmap2 :: IFunctor f => (a -> b) -> f (f a) -> f (f b) 
     :: IFunctor f -> (a -> b) -> f (f a) -> f (f b) 
+7

यह सिर्फ एक बग है। – augustss

+0

@augustss क्या इसकी सूचना मिली है? यदि हां, तो कहाँ? – rightfold

+1

आपके पास कौन सा ghc संस्करण है? – augustss

उत्तर

1

यह GHC 7.8.2 पर काम नहीं करता। यह त्रुटि Expected a constraint, but ‘IFunctor f’ has kind ‘*’ देता है।

जीएचसी के पुराने संस्करणों में एक बग था जहां उन्होंने => को कुछ स्थितियों में -> जैसे उपयोग करने की अनुमति दी थी। यह संभावना है क्योंकि आंतरिक रूप से वर्ग की बाधाओं को विधि शब्दकोशों के रूप में तर्क के रूप में पारित किया जाता है।

संबंधित मुद्दे