मुझे डिबगिंग के लिए प्रिंट करने से पहले Data.Text
उदाहरणों को अनपॅक करने का बीमार पड़ गया और इसके लिए केवल Text.Printf
का उपयोग करने के लिए सोचा।टेक्स्ट.प्रिंटफ डेटा के साथ। टेक्स्ट?
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
import Data.Text
import Text.Printf
--instance PrintfArg Text where
-- toUPrintf = toUPrintf . unpack
main :: IO()
main = do
let input :: Text = "abc"
printf "Input: %s\n" input
त्रुटि:
src/Main.hs:12:3:
No instance for (PrintfArg Text)
arising from a use of `printf'
Possible fix: add an instance declaration for (PrintfArg Text)
In a stmt of a 'do' block: printf "Input: %s" input
In the expression:
do { let input :: Text = "abc";
printf "Input: %s" input }
In an equation for `main':
main
= do { let input :: Text = ...;
printf "Input: %s" input }
उदाहरण घोषणा uncommenting के बाद: दुर्भाग्य से, मैं यह काम नहीं कर सके
src/Main.hs:7:7:
`toUPrintf' is not a (visible) method of class `PrintfArg'
src/Main.hs:7:19: Not in scope: `toUPrintf'
कोई भी विचार?
संपादित
के रूप में सुझाव दिया, की कोशिश की वें, अभी भी कोई जाने:
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
import Data.Text
import Language.Haskell.TH
import Text.Printf
runQ [d| instance PrintfArg Text where toUPrintf = toUPrintf . unpack|]
main :: IO()
main = do
let input :: Text = "abc"
printf "Input: %s\n" input
त्रुटि:
src/Main.hs:9:40:
'toUPrintf' is not a (visible) method of class 'PrintfArg'
src/Main.hs:9:52: Not in scope: 'toUPrintf'
मदद! यह आश्चर्यजनक है कि डिफ़ॉल्ट रूप से Data.Text का उपयोग करने के लिए सभी सलाह दिए गए बॉक्स से बाहर काम नहीं करता है।
printf पैकेज प्राप्त करें और PrintfArg वर्ग और उपयोग निर्यात कि सामान्य पैकेज के बजाय। – augustss
@augustss: printf आधार में है, एक अलग पैकेज नहीं है। और शायद पर्याप्त सामान निर्यात किया जा सकता है ताकि उपयोगकर्ता अपना खुद का प्रिंटफैर उदाहरण बना सकें? –
मैं सभी प्रकार के वर्गों और प्रकारों को बेनकाब करने के लिए एक टेक्स्ट.प्रिंटफ। आंतरिक मॉड्यूल जोड़ूंगा। – augustss