高阶可遍历函子是否有相应的光学器件?

Is there a corresponding optic for higher-order traversable functors?

Hedgehog 有一个 HTraversable class 定义如下:

-- | Higher-order traversable functors.
--
class HTraversable t where
  htraverse :: Applicative f => (forall a. g a -> f (h a)) -> t g -> f (t h)

它与他们的 Var 类型一起使用,用于参数化一个类型,决定值是具体的还是抽象的。 t 有种类 (* -> *) -> * 并且是高阶函子,尽管它们实际上没有 class、fgh 有亲切* -> *。我在几个不同的库中看到了相同的定义。

有没有办法从中取出光学器件?我承认我什至不知道那会做什么,而且我对镜片或常规 Traversable 也不太满意。

当然可以。

type HTraversal s t a b =
    forall f. Applicative f => (forall x. a x -> f (b x)) -> s -> f t

htraverse :: HTraversable t => HTraversal (t a) (t b) a b

记住,lensTraversal 是通过采用 traverse 的类型并让 t at b 类型变化来实现的,查看不是作为多态容器而是作为整体 blob 可遍历。

HTraversal 有多大用处,我不知道。你不能用 (.).

很好地组合它们