Tanıdığım çoğu OO dilinde, String
'un toString
yöntemi aslında yalnızca kimlik işlevidir. Ancak Haskell show
çift tırnak ekler.Tırnak eklemeyen bir polimorfik "toString" işlevi var mı?
yüzden numaralar
f [0,1,2,3] -- "0123"
ama Yaylı ekstra tırnak
f ["one", "two", "three"] -- "\"one\"\"two\"\"three\""
zaman ben gerçekten sona için beklendiği gibi çalıştığını bu
f :: Show a => [a] -> String
f = concat . map show
gibi bir işlev şey yazarsanız "onetwothree"
'u isteyin.
Polimorfik olarak f
yazmak istemiş olsaydım, bunu yalnızca Show
kısıtlamasıyla yapmanın ve Örneğini Göster örneğini geçersiz kılmadan yapmanın bir yolu var mı (eğer mümkünse).
Kendi tip sınıf yaratmaktır ile gelebilir iyi:
class (Show a) => ToString a where
toString = show
ve her şey için bir örneğini ekleyin?
instance ToString String where toString = id
instance ToString Char where toString = pure
instance ToString Int
instance ToString Maybe
...etc
Özelleştirilmiş bir "Gösterisi" (https://github.com/corsis/PortFusion/blob/ad63a006cff324667cca2316699e26a0078fbc02/src/Main.hs#L67) türü oluşturmak için 'newtype' yapısını kullanarak sona erdim 've' Read' örnekleri: https://github.com/corsis/PortFusion/blob/ad63a006cff324667cca2316699e26a0078fbc02/src/Main.hs#L67 –
Ayrıca bkz. http://stackoverflow.com/questions/12102874/haskell-suppress-quotes -çevre-dizeleri-gösterildiğinde – sth
'Show' sadece çift tırnak ekler değil unutmayın. Ayrıca satır sonları gibi karakterlerden kaçar. Örneğin, tek karakterli bir karakter olan "" \ n "', ", \, n" karakterleriyle dört karakterli bir dize olarak gösterilir. – sdcvvc