回答
在標準庫,ShowS
定義爲:
type ShowS = String -> String
這是一個difference list。 訣竅是,一個字符串xs
被表示爲ShowS
的函數將其預加到任何其他列表:(xs ++)
。這允許有效的級聯,避免了嵌套左關聯級聯的問題(即((as ++ bs) ++ cs) ++ ds
)。例如:
hello = ("hello" ++)
world = ("world" ++)
-- We can "concatenate" ShowS values simply by composing them:
helloworld = hello . world
-- and turn them into Strings by passing them an empty list:
helloworld' = helloworld ""
,因爲它在標準Show
類型類的實現中使用,以實現有效show
ING大,深度嵌套的結構這就是所謂的ShowS
;以及show
,可以實現showsPrec
,它的類型是:
showsPrec :: (Show a) => Int -> a -> ShowS
這使得運算符優先級的處理,並返回一個值ShowS
。標準實例實現此效率而不是show
; show a
然後被定義爲showsPrec 0 a ""
。 (此默認定義是在Show
類型類本身,所以你可以實現showsPrec
一個完整的實例。)
鏈接: ShowS位於基本包的Text.Show模塊中,位於 http://hackage.haskell.org/package/base-4.7.0.2/docs/Text-Show.html – 2015-02-02 15:06:41
showS
採用差分列表的方法來有效地串聯的顯示值的各個組件。該函數取值顯示,和一個字符串追加到結果。附加的字符串一直傳遞到最右邊的子值,直到它到達一個葉子,它實際上被附加到葉子上。
有差異列表(包括showS
)這裏http://www.haskell.org/haskellwiki/Difference_list
- 1. C++詭計與*是什麼意思?
- 2. 詭計或計劃中的定義*是什麼?
- 3. 爲什麼Haskell的showList函數返回ShowS
- 4. 你怎麼理解這裏的詭計?
- 5. 是什麼。在Haskell中做什麼?
- 6. 是什麼()在Haskell
- 7. 是F#編譯器的詭計嗎?
- 8. 詭計不開始
- 9. 嘲諷和詭計
- 10. Haskell中Ruby的pnormaldist統計函數的等價物是什麼?
- 11. Haskell的擴展是什麼?
- 12. 什麼是Haskell的Stream Fusion
- 13. MethodImpl(NoOptimization)這個方法,它有什麼作用?這真的是詭計嗎?
- 14. Haskell中的ConcurrentHashMap的模擬是什麼?
- 15. 錯誤C3918:錯誤詭計爲是nullptr
- 16. 這個詭計爲什麼不適合我?
- 17. 什麼是Haskell中的嵌套模式?
- 18. Haskell中的非確定性是什麼?
- 19. Haskell中的':'是什麼意思?
- 20. 什麼是Haskell中的「::」等價函數?
- 21. Haskell Prelude中'const'的含義是什麼?
- 22. Haskell中的(:=)是什麼意思?
- 23. 「ls」在Haskell中的含義是什麼?
- 24. Haskell中的實例是什麼意思?
- 25. haskell中的「&」是什麼意思?
- 26. Haskell中「fac」的含義是什麼?
- 27. Haskell中「〜」的含義是什麼?
- 28. 什麼是Haskell中的「火花」
- 29. 這是什麼Haskell語法?
- 30. 什麼是Haskell`( - >)a` monad?
望着這裏的答案,簡明摘要可能是一個描述:「'showS'絕招」就是把一個低效('爲O(n^2 )'把左邊關聯的字符串連接成一個有效的('O(n)')右邊關聯的字符串連接,方法是將字符串轉換爲(前置)連續,然後組成連續。 – ntc2 2013-12-27 01:11:06