2011-11-19 18 views
5

Bir sorum var: Dize veya Char için show yöntemini nasıl geçersiz kılabilirim? Teşekkürler. insanlar benim yorumunu gibi görünüyor yanaHaskell'de String/Char için show yöntemini geçersiz kıl

+1

Sadece "Char -> String" veya "String -> String" türlerinin diğer işlevlerini tanımlamak istememenizin bir nedeni var mı? Neden şovu geçersiz kılmak istiyorsunuz? – hammar

+4

Sanırım bir [yeni tip] (http://www.haskell.org/haskellwiki/Newtype) içine sarmanız ve bu tür için Show'u tanımlamanız gerekiyor. –

cevap

2

yazdıracaktır Bunu yapmak istiyorsan, yanlış yapıyorsun.

Daha teknik bir neden için, önceki bir soruya bakın, my answer.

Sen gerçekten (muhtemelen kendi tip sınıf aracılığıyla) kendi a -> String fonksiyonları kullanarak veya daha detaylı çıkışları için oldukça-baskı kitaplığı (bunlardan bazıları zaten bir dahili Pretty sınıf var) kullanmak gerekir.

8

, işte burada bir cevap gibidir:

varolan türlerinde tip sınıfları reimplement istiyorsanız

, bir newtype -declared tipinde dolayabilirsiniz. Bu, kendi uygulamalarınızı, çalışma zamanında herhangi bir gerçek ek yük olmadan tanımlamanıza olanak tanır (çünkü newtype orijinal türüne izomorftur, çalışma zamanında gerçek bir boks işlemi yapılmaz).

Bu şuna benzer olabilir:

newtype MyChar = MyChar Char 

instance Show MyChar where 
    show (MyChar c) = "head \"" ++ c : "\"" 

Bu kullanabilirsiniz Char s sararak MyChar ile, şöyle:

print $ fmap MyChar "test" 

Bu

[head "t",head "e",head "s",head "t"] 
+0

Ayrıca, showList'i tanımlayabilirsiniz, daha sonra MyChar'ın listeleri de özel biçimlendirmeye sahip olacaktır. Aslında bu, karakter listelerinin ([Char]) gösterilmesinin, diğer listeleri ([a]) göstermekten farklı davranmasının nedeni budur. – sdcvvc

İlgili konular