में हल ओवरलैपिंग उदाहरणों मैं एक मॉड्यूल भी कि accelerate पुस्तकालय से आयात करता है में टाइप Tagged s b
(Data.Tagged) की show
कुछ करने की कोशिश कर रहा हूँ। दुर्भाग्य से, में तेजी लाने के पुस्तकालय शो उदाहरण Data.Array.Accelerate.Pretty.hs मेंबाहरी पुस्तकालय
instance Kit acc => Show (acc aenv a) where
परिभाषित करता है। थोड़ा सा पढ़ना, इस उदाहरण को आयात करने से बचने के लिए मैं कुछ भी नहीं कर सकता, जो स्पष्ट रूप से डेटा के साथ ओवरलैप करता है। Show
उदाहरण के साथ। वास्तव में, जेनेरिक त्वरित उदाहरण मुझे *->*->*
के कुछ भी प्रिंट करने से रोकता है।
यहाँ एक सरल उदाहरण है कि समस्या को दर्शाता है है:
{-# LANGUAGE FlexibleContexts, OverlappingInstances, IncoherentInstances #-}
import Data.Array.Accelerate
import Data.Tagged
main :: (Show (Tagged Int Int)) => IO()
main = let x = Tagged 3
in print (x::Tagged Int Int)
त्रुटि:
- मैंने सोचा था कि
OverlappingInstances
मुझे हल करने की अनुमति होगी:Overlapping instances for Show (Tagged * Int Int) arising from a use of `print' Matching instances: instance Show b => Show (Tagged k s b) -- Defined in `Data.Tagged' instance [overlap ok] accelerate-0.13.0.5:Data.Array.Accelerate.Trafo.Base.Kit acc => Show (acc aenv a) -- Defined in `Data.Array.Accelerate.Pretty'
मैं कुछ प्रश्न हैं उदाहरण, लेकिन मुझे एक ही त्रुटि मिलती है।
IncoherentInstances
निश्चित रूप से मुझे संकलित करने दें ... सही? लेकिन ऐसा नहीं है।क्यों GHC रिपोर्ट Data.Tagged
Show (Tagged k s b)
के रूप में उदाहरण दिखाता है जब उदाहरण (Data.Tagged से नकल) है:instance Show b => Show (Tagged s b) where
मेरा मानना है कि मैंने देखा है, जहां मैं केवल सक्षम था पहले एक स्पष्ट प्रकार हस्ताक्षर जोड़कर ओवरलैपिंग उदाहरणों को हल करने के लिए (सबसे विशिष्ट उदाहरण चुनने के लिए जीएचसी को मजबूर करने के लिए), लेकिन जैसा कि मेरा उदाहरण शीर्ष स्तर पर है और इसमें कोई बहुरूपता शामिल नहीं है, मुझे नहीं पता कि मैं कितना स्पष्ट हो सकता हूं प्रकार के।
मेरे धारणा के बाद से (मुझे लगता है कि) Tagged
Accelerate.Base.Kit
का एक उदाहरण उदाहरण की कमी को पूरा नहीं करता (मैं जानता हूँ कि हम केवल के आरएचएस पर मेल नहीं है और इसलिए है कि GHC Data.Tagged उदाहरण चयन करने में सक्षम होना चाहिए उदाहरण के लिए, लेकिन GHC यह पता लगाने की है कि उदाहरणों में से एक संभवतः लागू नहीं कर सकता है सक्षम होना चाहिए ...)
संपादित
मैं एक बग रिपोर्ट here बनाया है, और अपमानजनक उदाहरण अब निकाल दिया जाता है रेपो हेड में। नीचे # 3 का एक बड़ा जवाब है, लेकिन मुझे अभी भी यह जानने में दिलचस्पी है कि क्यों OverlappingInstances
/IncoherentInstances
काम नहीं किया।