ehi*_*ird 42
在标准库中,ShowS定义为:
type ShowS = String -> String
Run Code Online (Sandbox Code Playgroud)
这是一个差异列表.诀窍在于,字符串由将其添加到任何其他列表的函数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 ""
Run Code Online (Sandbox Code Playgroud)
ShowS之所以这样,是因为它用于标准Show类型类的实现,以便有效地show处理大型,深层嵌套的结构; 以及show,你可以实现showsPrec,其类型:
showsPrec :: (Show a) => Int -> a -> ShowS
Run Code Online (Sandbox Code Playgroud)
这允许处理运算符优先级,并返回一个ShowS值.标准实例实现了这个而不是show效率; show a然后用它来定义,如showsPrec 0 a "".(此默认定义位于Show类型类本身中,因此您只需实现showsPrec完整的实例.)
showS使用差异列表方法有效地连接所显示值的各个组件.该函数接受显示的值,并附加一个字符串以附加到结果中.附加的字符串一直向下传递到最右边的子值,直到它到达叶子,实际上附加了叶子.
这里有一个差异列表(包括showS)的描述http://www.haskell.org/haskellwiki/Difference_list
| 归档时间: |
|
| 查看次数: |
4984 次 |
| 最近记录: |