由於效率(可能有很多),我想使用shows
連接一串字符串。然而,當我這樣做,我得到不必要的"
字符:Haskell中的字符串連接和不需要的引號
Prelude> "a" ++ "b" ++ "c"
"abc" -- ordinary concatenation - expected result
Prelude> (shows "a" . shows "b" . shows "c") ""
"\"a\"\"b\"\"c\"" -- actual result
可能有人請解釋爲什麼會發生這種情況,我應該怎樣做用shows
函數來實現++
行爲?
當我看着這個類型的上述(只是出於好奇),我有以下幾點:
Prelude> :t ("a" ++ "b" ++ "c")
("a" ++ "b" ++ "c") :: [Char]
Prelude> :t ((shows "a" . shows "b" . shows "c") "")
((shows "a" . shows "b" . shows "c") "") :: String
是否在其他情況下,一個案件和String
的[Char]
必須做的事情行爲++
和shows
,即使String
只是[Char]
的別名?
[相關](http://stackoverflow.com/questions/576213/efficient-string-implementation-in-haskell)。 –
'[Char]'與'String'只是類型檢查操作的一個工件;這可能是因爲'(++)'操作一般類型'[a]',而'shows'特定於'String'。 '[Char]'和'String'之間沒有任何區別。 –