Haskell反向折叠结构
示例
借助Dualmonoid,任何折叠都可以沿相反的方向进行,后者会翻转现有的monoid,从而使聚合向后进行。
newtype Dual a = Dual { getDual :: a }
instance Monoid m => Monoid (Dual m) where
mempty = Dual mempty
(Dual x) `mappend` (Dual y) = Dual (y `mappend` x)当foldMap呼叫的基本单边形被翻转时Dual,折线向后运行;在Reverse中定义了以下类型Data.Functor.Reverse:
newtype Reverse t a = Reverse { getReverse :: t a }
instance Foldable t => Foldable (Reverse t) where
foldMap f = getDual . foldMap (Dual . f) . getReverse我们可以使用这种机制reverse为列表写一个简洁的代码:
reverse :: [a] -> [a] reverse = toList . Reverse
热门推荐
3 祝福语简短的微信
10 幼儿祝福语大全简短贺卡
11 感谢教官文案祝福语简短
12 鼠年同事祝福语简短创意
13 元旦祝福语 简短独特群发
14 妈咪跟我生日祝福语简短
15 给儿子新婚祝福语简短
16 伴娘祝福语长文案简短
17 恭喜高考完祝福语简短
18 生日祝福语送老公简短