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 次,然后用运算符 <> 连接起来。

Haskell语言学习笔记(71)Semigroup的更多相关文章

  1. Haskell语言学习笔记(88)语言扩展(1)

    ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...

  2. Haskell语言学习笔记(79)lambda演算

    lambda演算 根据维基百科,lambda演算(英语:lambda calculus,λ-calculus)是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义.函数如何被应用以 ...

  3. Haskell语言学习笔记(69)Yesod

    Yesod Yesod 是一个使用 Haskell 语言的 Web 框架. 安装 Yesod 首先更新 Haskell Platform 到最新版 (Yesod 依赖的库非常多,版本不一致的话很容易安 ...

  4. Haskell语言学习笔记(20)IORef, STRef

    IORef 一个在IO monad中使用变量的类型. 函数 参数 功能 newIORef 值 新建带初值的引用 readIORef 引用 读取引用的值 writeIORef 引用和值 设置引用的值 m ...

  5. Haskell语言学习笔记(39)Category

    Category class Category cat where id :: cat a a (.) :: cat b c -> cat a b -> cat a c instance ...

  6. Haskell语言学习笔记(72)Free Monad

    安装 free 包 $ cabal install free Installed free-5.0.2 Free Monad data Free f a = Pure a | Free (f (Fre ...

  7. Haskell语言学习笔记(44)Lens(2)

    自定义 Lens 和 Isos -- Some of the examples in this chapter require a few GHC extensions: -- TemplateHas ...

  8. Haskell语言学习笔记(38)Lens(1)

    Lens Lens是一个接近语言级别的库,使用它可以方便的读取,设置,修改一个大的数据结构中某一部分的值. view, over, set Prelude> :m +Control.Lens P ...

  9. Haskell语言学习笔记(92)HXT

    HXT The Haskell XML Toolbox (hxt) 是一个解析 XML 的库. $ cabal install hxt Installed hxt-9.3.1.16 Prelude&g ...

随机推荐

  1. [UE4]UI动画

  2. vue todolist待办事项完整

    <template> <div id="app"> <input type="text" v-model='todo' @keyd ...

  3. 数据分箱:等频分箱,等距分箱,卡方分箱,计算WOE、IV

    转载:https://zhuanlan.zhihu.com/p/38440477 转载:https://blog.csdn.net/starzhou/article/details/78930490 ...

  4. 绘制字母和数字组合的验证码(原生php)

    <?php $font = array('font/FZZQJW.TTF','font/STHUPO.TTF');//字体 $str = '689acdefhjkmnpqrtuvwxyACDEF ...

  5. Json4:使用json-lib解析、生成Json

    特征:1.包多2.JSONObject.fromObject import net.sf.json.JSONObject; public class JsonLib { public static v ...

  6. day23面向对象编程基础

    面向对象编程基础1.面向过程的编程思想    核心过程二字,过程指的是解决问题的步骤,即先干什么\再干什么\后干什么    基于该思想编写程序就好比在设计一条流水线,是一种机械式的思维方式    优点 ...

  7. com.alibaba.dubbo.rpc.RpcException: Fail to start server(url: dubbo://192.16。。

    开启了linux的zookeeper服务,启动e3-manager时发现出现com.alibaba.dubbo.rpc.RpcException: Fail to start server(url: ...

  8. 【MySql】【Navicat】下载,安装,激活攻略

    来了一家新公司,新电脑,最近申请了DB访问的权限. 公司用的MySql数据库,自己下载了MySql workbench,用的也还不错. 现在下载了一个Navicat,比较讨厌的是,现在很多软件都需要注 ...

  9. 剑指Offer(三):从尾到头打印链表

    说明: 1.本系列是根据<剑指Offer>这个系列做的一个小笔记. 2.直接动力是因为师兄师姐找工作很难,而且机械出生的我面试算法更难. 3.刚开始准备刷LeetCode.LintCode ...

  10. MySQL 可以用localhost 连接,但不能用IP连接的问题

    连接问题 由于数据库配置的问题,当我们用ip连接数据库时,会出现连接不上的情况,而用localhost连接则没有任何的问题.解决方法: mysql安装完后,默认是root用户,root用户只能在服务器 ...