gpt4 book ai didi

haskell - Traversable 和 MonoTraversable 之间有什么东西吗?

转载 作者:行者123 更新时间:2023-12-01 10:18:51 25 4
gpt4 key购买 nike

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

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,因为应用程序内部的结果类型不必与输入类型完全相同,而且它不是 traverse Traversable 的,因为传入的函数需要知道 Bar,尽管它不在类型参数中。

最佳答案

镜头包装会称之为 Traversal :

almostTraverse :: Traversal (Foo a) (Foo b) (Bar a) (Bar b)

您可以考虑制作一个 Each 的实例类型类,如

instance Each (Foo a) (Foo b) (Bar a) (Bar b) where
each f (MkFoo x y) = liftA2 MkFoo (f x) (f y)

关于haskell - Traversable 和 MonoTraversable 之间有什么东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57794397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com