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
非常优雅而高明的理论,但是我好像没怎么懂它的深层意义
只知道懒惰计算了。。。
然后在一个算式前加$!,表示强制先计算它