मुझे प्रकार के परिवारों के साथ डेटा प्रकारों का उपयोग करते समय एक दिलचस्प स्थिति मिली।हास्केल प्रकार के परिवार के अनुप्रयोगों का मूल्यांकन नहीं किया जाता है
कंपाइलर का त्रुटि संदेश No instance for (C (ID())) arising from a use of W
है। यह सुझाव देता है कि एक प्रकार का पारिवारिक आवेदन पूरी तरह से मूल्यांकन नहीं किया जाता है, भले ही यह संतृप्त हो। :kind! ID()
()
का मूल्यांकन करता है, इसलिए C()
उदाहरण के अनुसार उपयोग किया जाना चाहिए।
{-# LANGUAGE GADTs, TypeFamilies, UndecidableInstances, FlexibleContexts #-}
type family ID t where
ID t = t
class C t where
instance C() where
data W where
W :: C (AppID t) => P t -> W
type family AppID t where
AppID t = (ConstID t)()
type family ConstID t where
ConstID t = ID
data P t where
P :: P t
data A
w :: W
w = W (P :: P A)
क्या मैं किसी भी तरह ID()
के मूल्यांकन को मजबूर कर सकता हूं? क्या यह एक कंपाइलर बग है?
मैं GHC 7.8.3
(आईडी()) कुछ भी कैसे मूल्यांकन करता है? आईडी परिवार के लिए कोई उदाहरण नहीं हैं। – augustss
मैंने इसे एक बंद प्रकार के परिवार के रूप में लिखा (http://www.haskell.org/haskellwiki/GHC/Type_families#Closed_family_simplification) –
इसे सामान्य प्रकार के परिवार के रूप में लिखना त्रुटि को नहीं बदलता है। –