Bitraversable

class (Bifunctor t, Bifoldable t) => Bitraversable t where
bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> t a b -> f (t c d)
bitraverse f g = bisequenceA . bimap f g bisequenceA :: (Bitraversable t, Applicative f) => t (f a) (f b) -> f (t a b)
bisequenceA = bitraverse id id

Bitraversable 是个类型类。主要用于遍历二元数据结构。

Either 是个 Bitraversable

instance Bitraversable Either where
bitraverse f _ (Left a) = Left <$> f a
bitraverse _ g (Right b) = Right <$> g b

(,) 是个 Bitraversable

instance Bitraversable (,) where
bitraverse f g ~(a, b) = (,) <$> f a <*> g b

Const 是个 Bitraversable

instance Bitraversable Const where
bitraverse f _ (Const a) = Const <$> f a

应用 Bitraversable

Prelude Data.Bitraversable> bitraverse (\x -> [x, x+1]) (\x -> [x, x*2]) (Left 2)
[Left 2,Left 3]
Prelude Data.Bitraversable> bitraverse (\x -> [x, x+1]) (\x -> [x, x*2]) (Right 3)
[Right 3,Right 6]
Prelude Data.Bitraversable> bitraverse (\x -> [x, x+1]) (\x -> [x, x*2]) (2,3)
[(2,3),(2,6),(3,3),(3,6)]
Prelude Data.Bitraversable Control.Applicative> bitraverse (\x -> [x, x+1]) (\x -> [x, x*2]) (Const 2)
[Const 2,Const 3]
Prelude Data.Bitraversable> bisequenceA (Left [2,3])
[Left 2,Left 3]
Prelude Data.Bitraversable> bisequenceA (Right [2,3])
[Right 2,Right 3]
Prelude Data.Bitraversable> bisequenceA ([2,3],[4,5])
[(2,4),(2,5),(3,4),(3,5)]
Prelude Data.Bitraversable Control.Applicative> bisequenceA (Const [2,3])
[Const 2,Const 3]

最新文章

  1. CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking)
  2. vim使用技巧
  3. [C#开发小技巧]解决WinForm控件TabControl闪烁问题
  4. Android之mtk上传log
  5. 获取openid 的步骤
  6. jquery 之选择器
  7. Tab切换类型
  8. C阶段【01】 - C基础
  9. android如何播放和录制音频
  10. Android网络编程系列 一 TCP/IP协议族之网际层
  11. linux驱动程序框架基础
  12. HDU 4462 Scaring the Birds (暴力求解,二进制法)
  13. JSON API in Javascript
  14. C# HTTP 请求
  15. myeclipse连接hadoop集群编程及问题解决
  16. IOS中UIScrollView的contentSize、contentOffset和contentInset属性
  17. JSP的几种跳转方式的异同
  18. qPCR检测基因表达的引物数据库
  19. 力扣算法题—079单词搜索【DFS】
  20. 报错:NoSuchMethodError: kafka.javaapi.PartitionMetadata.leader()Lkafka/cluster/Broker;

热门文章

  1. URL中的hash(井号)
  2. python 正则表达式的使用
  3. CentOS启动网络提示connect: Network is unreachable(配置静态路由)
  4. Pascal可视化编程 CodeTyphon 、Lazarus
  5. Android Drawable Mipmap Vector使用及Vector兼容
  6. [原]DataGridView 回车不换行代码 AND 编辑时的字符控制
  7. javascript对象讲解
  8. 阿里数据服务P6~P7晋升要点
  9. 洛谷P1414 又是毕业季II
  10. MySQL 查看执行的SQL记录