zoukankan      html  css  js  c++  java
  • Haskell语言学习笔记(71)Semigroup

    Semigroup

    class Semigroup a where
            (<>) :: a -> a -> a
            sconcat :: NonEmpty a -> a
            stimes :: Integral b => b -> a -> a
    
    class Semigroup a => Monoid a where
            mempty  :: a
    
            mappend :: a -> a -> a
            mappend = (<>)
    
            mconcat :: [a] -> a
            mconcat = foldr mappend mempty
    

    半群(Semigroup)是个类型类,它是幺半群(Monoid)的基类。

    Prelude Data.List.NonEmpty Data.Semigroup> Sum 3 <> Sum 4
    Sum {getSum = 7}
    Prelude Data.List.NonEmpty Data.Semigroup> sconcat $ Sum 3 :| [Sum 4]
    Sum {getSum = 7}
    Prelude Data.List.NonEmpty Data.Semigroup> [3] <> [4]
    [3,4]
    Prelude Data.List.NonEmpty Data.Semigroup> sconcat $ [3] :| [[4]]
    [3,4]
    Prelude Data.List.NonEmpty Data.Semigroup> stimes 3 [3]
    [3,3,3]
    Prelude Data.List.NonEmpty Data.Semigroup> (1 :| [2]) <> (1 :| [2])
    1 :| [2,1,2]
    Prelude Data.List.NonEmpty Data.Semigroup> stimes 3 $ 1 :| [2]
    1 :| [2,1,2,1,2]
    Prelude Data.List.NonEmpty Data.Semigroup> stimes 3 $ Sum 3
    Sum {getSum = 9}
    

    运算符 <> 的实现与 Monoid 中的 mempty 同义。
    sconcat a 将 NonEmpty 列表 a 中的各个元素用运算符 <> 连接起来。
    stimes b a 将 a 重复 b 次,然后用运算符 <> 连接起来。

  • 相关阅读:
    函数是什么?
    设置mac笔记本为固定ip
    JMeter-充值-生成随机数
    JMeter_方案上架,遇到的问题及解决
    做有态度的测试做
    JMeter-标的上架调整与完成
    上标-担保机构
    JMeter已传值但是提示为空
    JMeter上架标的(yyb-csg)
    JMeter中的正则表达式的匹配
  • 原文地址:https://www.cnblogs.com/zwvista/p/8966941.html
Copyright © 2011-2022 走看看