Haskell 以表格格式打印带有标题的地图

Haskell 以表格格式打印带有标题的地图,haskell,Haskell,在Haskell中给定一个整数映射(Map Int),当我使用print(myMap)时,我可以打印如下输出: 但是,我需要它以表格格式显示,标题如下: ID COUNT 1 7 2 24 3 7 是否有内置的Haskell将地图显示到表中,或生成表视图的方法? 谢谢,hackage上的库可用于打印具有可打印值的表视图 {-# LANGUAGE FlexibleInstances #-} import qualified Text.PrettyPrint.Boxes as PB cl

在Haskell中给定一个整数映射(Map Int),当我使用print(myMap)时,我可以打印如下输出:

但是,我需要它以表格格式显示,标题如下:

ID COUNT
1  7
2  24
3  7
是否有内置的Haskell将地图显示到表中,或生成表视图的方法? 谢谢,

hackage上的库可用于打印具有可打印值的表视图

{-# LANGUAGE FlexibleInstances #-}

import qualified Text.PrettyPrint.Boxes as PB

class Pretty a where
  ppr :: a -> PB.Box

instance Pretty String where
  ppr = PB.text

instance Pretty Integer where
  ppr = PB.text . show

col :: (Pretty a, Pretty t) => (t, [a]) -> PB.Box
col (a, xs) = PB.vcat PB.left $ lab ++ vals
  where
    lab = [ppr a]
    vals = fmap ppr xs

ex1 :: String
ex1 = PB.render $ PB.hsep 1 PB.left $ fmap col cols
  where
    cols :: [(String, [Integer])]
    cols = [
        ("ID"    , [1,2,3]),
        ("COUNT" , [7,24,7])
      ]

main :: IO ()
main = putStrLn ex1

-- ID COUNT
-- 1  7
-- 2  24
-- 3  7

“进桌”真的很模糊
printRow(a,b)=print$(show a)+“\t”++(show b)
是最简单的方法get@BartekBanachewicz很抱歉我只是想把它输出成我的例子中类似于表格的东西:)@BartekBanachewicz但是我该如何处理标题呢?只需输出
“ID\t计数”
?@BartekBanachewicz我得到了你的建议,它看起来很棒,但我不知道如何获取我的地图(myMap)并将其传递给你的打印行(a,b)-我尝试了暴力(复制/粘贴)和I get error
无法将预期类型(a0,a1)与实际类型映射Int匹配(1)您似乎没有使用
PP
导入(2)虽然它在这里工作,因为每一行的高度都是1,但我觉得library缺少了用宽度和高度都不同的盒子方便地制作表格网格的功能。@ØrjanJohansen也有一个简单的解决方案,但是原始海报没有提到需要这种行为,所以没有必要使事情复杂化。
{-# LANGUAGE FlexibleInstances #-}

import qualified Text.PrettyPrint.Boxes as PB

class Pretty a where
  ppr :: a -> PB.Box

instance Pretty String where
  ppr = PB.text

instance Pretty Integer where
  ppr = PB.text . show

col :: (Pretty a, Pretty t) => (t, [a]) -> PB.Box
col (a, xs) = PB.vcat PB.left $ lab ++ vals
  where
    lab = [ppr a]
    vals = fmap ppr xs

ex1 :: String
ex1 = PB.render $ PB.hsep 1 PB.left $ fmap col cols
  where
    cols :: [(String, [Integer])]
    cols = [
        ("ID"    , [1,2,3]),
        ("COUNT" , [7,24,7])
      ]

main :: IO ()
main = putStrLn ex1

-- ID COUNT
-- 1  7
-- 2  24
-- 3  7