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
cevap
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.
, işte burada bir cevap gibidir:
varolan türlerinde tip sınıfları reimplement istiyorsanız
, birnewtype
-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"]
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
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
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. –