gpt4 book ai didi

Haskell - 包装和解开新型包装器 - 有没有更简单的方法?

转载 作者:行者123 更新时间:2023-12-04 17:10:32 25 4
gpt4 key购买 nike

我正在写一个函数 pad这需要一个列表并填充它直到它达到一定的大小。我尝试了两种实现:

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]

我真的不介意额外的打字,但它似乎并不能很好地传达意思。你将如何实现这个功能?

最佳答案

老实说,我可能会使用你的第二个例子。添加 Monoid约束只是为了使用 mempty作为“默认值”是矫枉过正。它还会向使用此功能的用户发送错误信息,他们可能对您需要什么感到困惑 mappend因为当你真的不这样做的时候。他们还必须制作 newtype和一个 Monoid例如,如果他们想用不同的值填充。

相反,请考虑更改参数的顺序,以便值在前。然后,只要您需要用相同的值填充大量列表,就可以部分应用它。您也可以使用 pad mempty 恢复第一个版本如果你需要它。

关于Haskell - 包装和解开新型包装器 - 有没有更简单的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16824706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com