我正在寫一個函數pad
,它需要一個列表並填充它,直到它達到一定的大小。我試過2個實現:Haskell - 包裝和展開新包裝 - 有沒有更簡單的方法?
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]
我真的不介意額外的打字,但它似乎甚至沒有傳達的意思很好。你將如何實現這個功能?
我會用'pad :: Int - > a - > [a] - > [a]'。有時候,人們想要填補不同的價值。 –
爲好奇鍛鍊。考慮'data Paddy a = [a]:...:a'並配備'Paddy'以壓縮'Applicative'結構,它將':...:'左邊的值配對,但是通過填充長度不匹配在':...:'後給出的值較短的列表。 – pigworker