Hata ayıklama için yazdırmadan önce her zaman Data.Text
örneklerini açmasından bıktım ve bunun için sadece Text.Printf
'u kullanmayı düşündüm.Text.Printf with Data.Text?
{-# 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
hatası:
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 }
örneği beyanı uncommenting sonra: Ne yazık ki, o iş yapamadı
src/Main.hs:7:7:
`toUPrintf' is not a (visible) method of class `PrintfArg'
src/Main.hs:7:19: Not in scope: `toUPrintf'
Herhangi bir fikir?
önerildiği gibiEDITED, hala hiçbir gitmek TH çalıştı:
{-# 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
Hata:
src/Main.hs:9:40:
'toUPrintf' is not a (visible) method of class 'PrintfArg'
src/Main.hs:9:52: Not in scope: 'toUPrintf'
Yardım! Bu Data.Text varsayılan olarak kullanmak için tüm tavsiyelerde verilen kutunun dışında işe yaramazsa şaşırtıcı. belgelerine
Printf paketi alın ve PrintfArg sınıf ve kullanımını ihracat yerine her zamanki paketin söyledi. – augustss
@augustss: printf tabanlıdır, ayrı bir paket değildir. Kullanıcıların kendi PrintfArg örneklerini oluşturabilmeleri için yeterli miktarda dışa aktarılabilir. –
Tüm tip sınıflarını ve türlerini ortaya çıkarmak için bir Text.Printf.Internal modül ekleyeceğim. – augustss