我正在编写一个函数pad
,它接受一个列表并将其填充到一定大小。我尝试了 2 个实现:
pad :: Monoid a => Int -> [a] -> [a]
pad len list = replicate (len - length list) mempty ++ list
和
pad :: Int -> a -> [a] -> [a]
pad len value list = replicate (len - length list) value ++ list
第一个似乎是合乎逻辑的用法,但用整数列表(或以多种方式Monoid
表示的任何内容)调用它是一种痛苦:Monoid
(fmap getSum) <$> pad 8 <$> (fmap Sum) <$> [1,2,3]
我真的不介意额外的打字,但它似乎甚至不能很好地传达意思。你将如何实现这个功能?