मैं एक typeclass कुछ कार्यान्वित कार्य करता है जो एक लागू नहीं किया गया स्थिरांक मान का उपयोग किया है कि (table
) घोषित करने के लिए चाहते हैं घोषित करने के लिए:एक तरह से एक प्रकार कक्षा में एक निरंतर मूल्य
class FromRow a => StdQueries a where
table :: String
byId :: Int -> QueryM (Maybe a)
byId = fmap listToMaybe . queryM sql . Only
where sql = read $ "SELECT * FROM " ++ table ++ " WHERE id = ?"
विचार सरल है: मैं चाहता हूँ बस table
निर्दिष्ट करके इस typeclass instantiating द्वारा byId
(और अन्य समान कार्य) उपलब्ध मिलती है:
instance StdQueries SomeType where
table = "the_constant_value_for_this_type"
लेकिन संकलक निम्न संदेश के साथ शिकायत कर रखता है:
The class method `table'
mentions none of the type variables of the class StdQueries a
When checking the class method: table :: String
In the class declaration for `StdQueries'
वहाँ एक समस्या उस तरह के लिए किसी भी समाधान कर रहे हैं? newtype
सहायता या उस तरह से कुछ भी कर सकते हैं?
इसमें कोई गड़बड़ नहीं है, बहुत से प्रकार के वर्ग इस तरह से करते हैं। – leftaroundabout
कृपया इसे और अधिक पठनीय बनाने के लिए अपना कोड प्रारूपित करें; भी, क्या यह वास्तव में काम करता है? ऐसा लगता है कि आप अब 'टेबल' को एक फ़ंक्शन बना रहे हैं, लेकिन आप इसे 'sql = ...' भाग में इस तरह से उपयोग नहीं कर रहे हैं। – ErikR
तालिका का प्रकार 'ए -> स्ट्रिंग' है और 'स्ट्रिंग' नहीं है तो आप इसे कैसे जोड़ रहे हैं? – Satvik