首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Traversable和MonoTraversable之间有没有什么东西?

Traversable和MonoTraversable之间有没有什么东西?
EN

Stack Overflow用户
提问于 2019-09-05 03:00:35
回答 1查看 117关注 0票数 3

我有一个数据类型和附带的函数,看起来非常像某种遍历。下面是一个简化的例子:

代码语言:javascript
复制
data Foo x = MkFoo (Bar x) (Bar x)

almostTraverse :: Applicative f => (Bar a -> f (Bar b)) -> Foo a -> f (Foo b)
almostTraverse f (MkFoo x y) = MkFoo <$> f x <*> f y

假设Bar是某种不透明的类型,并且不一定是一个函数器。有没有一些类型类是almostTraverse的泛化?它不是来自MonoTraversableotraverse,因为applicative中的结果类型不必与输入类型完全相同,也不是来自Traversabletraverse,因为传入的函数需要知道Bar,尽管它不在类型参数中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-05 03:14:41

镜片包装会将其称为Traversal

代码语言:javascript
复制
almostTraverse :: Traversal (Foo a) (Foo b) (Bar a) (Bar b)

您可以考虑创建一个Each类型类的实例,如

代码语言:javascript
复制
instance Each (Foo a) (Foo b) (Bar a) (Bar b) where
    each f (MkFoo x y) = liftA2 MkFoo (f x) (f y)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57794397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档