Traversable 和 MonoTraversable 之间有什么东西吗?
Is there something in between Traversable and MonoTraversable?
我有一个数据类型和附带的函数,看起来非常像某种遍历。这是一个简化的例子:
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
的泛化?它不是 MonoTraversable
中的 otraverse
,因为应用程序中的结果类型不必与输入类型完全相同,而且它也不是 Traversable
中的 traverse
,因为传入的函数需要知道 Bar
尽管它不在类型参数中。
我有一个数据类型和附带的函数,看起来非常像某种遍历。这是一个简化的例子:
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
的泛化?它不是 MonoTraversable
中的 otraverse
,因为应用程序中的结果类型不必与输入类型完全相同,而且它也不是 Traversable
中的 traverse
,因为传入的函数需要知道 Bar
尽管它不在类型参数中。