2016-08-22 14 views
12

क्या कोई यह समझा सकता है कि निम्नलिखित कोड जीएचसी 8.0.1 को संकलन पर हमेशा लूप करने का कारण क्यों बनाते हैं, या यह एक बग है?जीएचसी 8.0.1 लटकता है। स्पष्टीकरण या कंपाइलर बग?

{-# LANGUAGE TypeFamilyDependencies #-} 
{-# LANGUAGE FlexibleInstances #-} 
{-# LANGUAGE AllowAmbiguousTypes #-} 

main = return $ f (Just 'c') 

data D1 x 
data D2 

type family TF x = t | t -> x 
type instance TF (D1 x, a) = Maybe (TF (x, a)) 
type instance TF (D2,()) = Char 

f :: TF (x, a) ->() 
f _ =() 
+3

मुझे पता नहीं है, लेकिन 'TypeFamilyDependencies' के लिए दस्तावेज़ मुझे डर है वे प्राइम टाइम के लिए पूरी तरह से तैयार नहीं कर रहे हैं बनाता है। उनके पास अप्राकृतिक प्रतिबंध हैं जो मेरे साथ सही नहीं बैठते हैं; अगर डेवलपर्स एक जगह चूक गए तो मुझे आश्चर्य नहीं होगा। – dfeuer

+1

यदि यह हमेशा के लिए loops है कि निश्चित रूप से एक बग है – jberryman

उत्तर

3

संकलक UndecidableInstances या UndecidableSuperclassCycles बिना अनंत लूप में गिरने jberryman stated के रूप में, एक संकलक बग है। आपको GHC Trac साइट पर इसकी रिपोर्ट करनी चाहिए।

मैंने आपके उदाहरण को थोड़ा सा सरल बनाया है, जो चीजों को स्पष्ट नहीं कर सकता है या नहीं और संभवतः आपकी बग रिपोर्ट को और अधिक प्रभावी बना देगा।

{-# LANGUAGE TypeFamilyDependencies #-} 

module TFLoop where 

import Data.Proxy 

main :: IO() 
main = return $ f Proxy Proxy (Just 'c') 

data D1 x 
data D2 

type family TF d a = t | t -> d a 
type instance TF (D1 x) a = Maybe (TF x a) 
type instance TF D2() = Char 

f :: proxy1 x -> proxy2 a -> TF x a ->() 
f _ _ _ =() 
संबंधित मुद्दे