haskell学习笔记——Further Part

前言:在经历了刚开始学的轻松和monad的折磨以后,剩下的部分就显得友善起来了,这里大概是对Foldables and Friends和Lazy Evaluation这两个部分的整理

Foldables and Friends

Semigroup和Monoid

Semigroup,即半群,一个定义了满足结合律的二元运算的代数系统

Monoid,即幺半群,在满足结合律的同时还拥有单位元的代数系统

在Semigroup中,我们需要定义满足结合律的运算符(<>),在Monoid中,我们需要定义单位元mempty

Foldable

Foldable是一个建立在Monoid上的class

需要实现下面的函数

class Foldable t where
 fold :: Monoid a => t a -> a
 foldMap :: Monoid b => (a -> b) -> t a -> b
 foldr :: (a -> b -> b) -> b -> t a -> b
 foldl :: (b -> a -> b) -> b -> t a -> b

Traversable

基于t是一个Functor和Foldable定义的类型

需要实现下面的函数

class (Functor t, Foldable t) => Traversable t where
 traverse :: Applicative f => (a -> f b) -> t a -> f (t b)

Lazy Evaluation

非常优雅而高明的理论,但是我好像没怎么懂它的深层意义

只知道懒惰计算了。。。

然后在一个算式前加$!,表示强制先计算它

posted @ 2022-10-28 16:45  deaf  阅读(47)  评论(0编辑  收藏  举报