Functor

1
2
3
-- Functor
(<$>) :: (a -> b) -> f a -> f b
fmap :: (a -> b) -> f a -> f b

Applicative

Applicative 有几个比较重要的操作

1
2
3
4
5
6
7
8
9
10
-- 把一个值 “包装” 成 Applicative
pure :: x -> A x

--
(<*>) :: A (a -> b) -> A a -> A b

-- 用函数,把两个盒子里的值取出来,计算,再放回盒子里
liftA2 :: (a -> b -> c) -> A a -> A b -> A c

traverse ::

Monad

Monad 建模了一切可能有副作用的操作,M a 表示一个操作,返回值的类型是 a

1
2
3
4
5
6
-- 考虑如下场景:
-- 进行某个操作后,需要使用其计算结果,再进行有副作用的操作
(>>=) :: m a -> (a -> m b) -> m b

-- 进行某个操作后,不使用其计算结果,进行下一个操作
(>>) :: m a -> m b -> m b