Text 如何设置';页面宽度';在Haskell中使用ansi wl pprint库?

Text 如何设置';页面宽度';在Haskell中使用ansi wl pprint库?,text,haskell,Text,Haskell,我目前正在使用ansi wl pprint库。width函数没有文档记录,但我需要设置它,使页面的宽度为80个字符,而不是默认的100个字符 我该怎么做?函数宽度接受Doc作为第一个参数,然后接受Int->Doc中的函数作为第二个参数。没有关于此函数的操作说明。查看fill和width函数的用法,似乎调用了width的第二个参数,其第一个参数的宽度将相应地生成一个文档 fill :: Int -> Doc -> Doc fill f d = width d (\w ->

我目前正在使用ansi wl pprint库。width函数没有文档记录,但我需要设置它,使页面的宽度为80个字符,而不是默认的100个字符

我该怎么做?函数宽度接受Doc作为第一个参数,然后接受Int->Doc中的函数作为第二个参数。没有关于此函数的操作说明。

查看
fill
width
函数的用法,似乎调用了
width
的第二个参数,其第一个参数的宽度将相应地生成一个文档

fill :: Int -> Doc -> Doc
fill f d = width d (\w ->
                  if (w >= f) then empty
                              else text (spaces (f - w)))

width :: Doc -> (Int -> Doc) -> Doc
width d f = column (\k1 -> d <> column (\k2 -> f (k2 - k1)))
fill::Int->Doc->Doc
填充f d=宽度d(\w->
如果(w>=f),则为空
else文本(空格(f-w)))
宽度::Doc->(Int->Doc)->Doc
宽度df=列(\k1->d列(\k2->f(k2-k1)))

如果ansi wl pprint遵循wl pprint,则您希望使用renderPretty函数将文档渲染为不同的宽度,并可能使用不同的功能区分数(此处为0.7),类似的操作应该可以:

show100 :: Doc -> String
show100 d = displayS (renderPretty 0.7 100 d) ""
参见Daan Leijen旧网站上手册的最后一节:


这似乎没有任何作用。我基本上想要左对齐的文本,右边缘参差不齐,换行。因此需要告诉它我的页面大小。也许你不想要一台漂亮的打印机。“漂亮的打印机”本质上是用嵌套打印的——想想源代码格式。它们不是段落格式化程序。我不知道是否有段落格式库。段落格式一直是“编程代数”组的一个主题——下面的链接中有代码,但本文的主题是函数算法,因此可能不太容易访问。我看不出这有什么帮助。我尝试过大多数组合,但似乎没有任何效果每当我尝试将其格式化为文本的“列”时,没有任何更改。我想输出一个右边缘不规则的左对齐文档,并使用文字换行。听起来你想要的是“段落格式”,而不是“漂亮的打印”。我不确定是否有用于此的库,尽管有“说明性”实现—请参阅我的其他评论。