3

Hedgehog有一个HTraversable这样定义的类:

-- | 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有 kind(* -> *) -> *并且是一个高阶函子,尽管他们实际上没有那个类f,g并且h有 kind * -> *。我已经看到在几个不同的库中定义了相同的东西。

有没有办法摆脱这种情况?我承认我什至不知道那会做什么,而且我对镜片或普通镜片也不是很舒服Traversable

4

1 回答 1

1

当然。

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

请记住,lens' 的Traversal出现是通过获取类型traverse并让t at b类型变化,而不是将可遍历对象视为多态容器,而是将其视为整体 blob。

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

于 2017-10-30T21:59:17.457 回答