मैं कुछ पुराने कोड है जो संकलित करने के लिए प्रयोग किया जाता है, लेकिन अब ऐसा नहीं है। मुझे चिंता है कि मैंने एक पैकेज प्रबंधन स्नफू मारा होगा, और मैं उस तरह की चीज़ से निपटने में वास्तव में बुरा हूं। मैंने इसे कम से कम असफल उदाहरण में घटा दिया है।उदाहरण कैसे है (पैरा बीबीटेस्ट्रिंग) गायब हो गया?
{-# LANGUAGE OverloadedStrings #-}
module Gremlin where
import Database.MySQL.Simple.Param
import qualified Data.ByteString as SB
foo :: Param x => [x]
foo = []
shoo :: [SB.ByteString]
shoo = foo
त्रुटि मैं
/.../Gremlin.hs:12:8:
No instance for (Param SB.ByteString) arising from a use of ‘foo’
In the expression: foo
In an equation for ‘shoo’: shoo = foo
है लेकिन जब मैं
module Database.MySQL.Simple.Param
(
Action(..)
, Param(..)
, inQuotes
) where
के लिए स्रोत कोड को देखो मैं
import qualified Data.ByteString as SB
और
०१२३५१६४१० देखनाinstance Param SB.ByteString where
render = Escape
{-# INLINE render #-}
प्रासंगिक संस्करण जानकारी शामिल हो सकती
$ ghci --version
The Glorious Glasgow Haskell Compilation System, version 7.10.2
$ ghc-pkg latest mysql-simple
mysql-simple-0.2.2.5
$ ghc-pkg latest bytestring
bytestring-0.10.8.1
जब मैं GHCi पूछना
:info Param
मैं मेरे नेतृत्व की उम्मीद होगी mysql-सरल प्रलेखन की तुलना में एक छोटी सूची मिलता है।
Prelude> :m + Database.MySQL.Simple.Param Data.ByteString
Prelude Database.MySQL.Simple.Param Data.ByteString> :info Param
class Param a where
render :: a -> Action
-- Defined in ‘Database.MySQL.Simple.Param’
instance Param [Char] -- Defined in ‘Database.MySQL.Simple.Param’
instance Param Word -- Defined in ‘Database.MySQL.Simple.Param’
instance Param a => Param (Maybe a)
-- Defined in ‘Database.MySQL.Simple.Param’
instance Param Integer -- Defined in ‘Database.MySQL.Simple.Param’
instance Param Int -- Defined in ‘Database.MySQL.Simple.Param’
instance Param Float -- Defined in ‘Database.MySQL.Simple.Param’
instance Param Double -- Defined in ‘Database.MySQL.Simple.Param’
instance Param Bool -- Defined in ‘Database.MySQL.Simple.Param’
instance Param Action -- Defined in ‘Database.MySQL.Simple.Param’
लेकिन मुझे लगता है कि केवल मुझे स्थानीय स्तर पर स्थानीय स्तर के उदाहरणों के बारे में बताता है। मैं तो मुसीबत का एक संभावित स्रोत के लिए
Prelude Database.MySQL.Simple.Param Data.ByteString> :m +Data.Text
Prelude Database.MySQL.Simple.Param Data.ByteString Data.Text> :info Param
class Param a where
...
instance Param Text -- Defined in ‘Database.MySQL.Simple.Param’
...
आगे की जांच अंक कार्य करें: मैं संस्करण से
$ ghc-pkg describe mysql-simple
name: mysql-simple
version: 0.2.2.5
...
depends:
...
bytestring-0.10.6.0-6e8453cb70b477776f26900f41a5e17a
...
मेरा अनुमान है कि कि उदाहरण के साथ ByteString
0.10.6.0
से है और विशिष्ट जब वास्तव में लिखने मेरी स्रोत फ़ाइल में एक ही आयात। यदि ऐसा है, तो मुझे थोड़ा सा पता चला है कि मुझे यह पता लगाने के लिए कितना काम करना पड़ा: यह अच्छा होगा अगर "फू के लिए कोई उदाहरण नहीं" होगा, भले ही एक पूरे दूसरे फू के लिए कोई उदाहरण हो "।
यह कबाल नरक, सही है? क्या मैं नए संस्करण के साथ mysql-simple पुनर्निर्माण कर सकता हूं? मैं ghc-pkg unregister mysql-simple
और फिर cabal install mysql-simple
, लेकिन कोई फायदा नहीं हुआ।
एक अच्छा मरम्मत रणनीति क्या है?
से बेहतर त्रुटि संदेश प्राप्त करना चाहिए क्या आपने अपने कोड को क्लीन कैबल सैंडबॉक्स में संकलित करने का प्रयास किया है? – redneb
मैं इन चीजों में क्यों कोई विशेषज्ञ नहीं हूं, लेकिन मैं आम तौर पर इच्छित पैकेज को सूचीबद्ध करता हूं और मुझे आवश्यक विशिष्ट संस्करण के साथ समस्याग्रस्त पैकेज सूचीबद्ध करता हूं। तो 'cabal mysql-simple bytestring-0.10.8.1' स्थापित करें। यह आमतौर पर काम करता है या मुझे एक बेहतर कारण देता है कि यह क्यों काम नहीं करेगा। – fryguybob
@redneb मैंने सैंडबॉक्स का उपयोग नहीं किया, लेकिन मुझे mysql-simple और utf8-bytestring इंस्टॉल करना पड़ा। और मैंने इसे उस क्रम में किया था। मुझे लगता है कि वहां पहले से ही पुराना हो सकता है, लेकिन यूटीएफ 8-बायटेस्ट्रिंग ने किसी नए चेतावनी की तरह, एक चेतावनी आपदा की तरह लाया होगा। – pigworker