高阶可遍历函子是否有相应的光学器件?
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、f
、g
和 h
有亲切* -> *
。我在几个不同的库中看到了相同的定义。
有没有办法从中取出光学器件?我承认我什至不知道那会做什么,而且我对镜片或常规 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
记住,lens
的 Traversal
是通过采用 traverse
的类型并让 t a
和 t b
类型变化来实现的,查看不是作为多态容器而是作为整体 blob 可遍历。
HTraversal
有多大用处,我不知道。你不能用 (.)
.
很好地组合它们
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、f
、g
和 h
有亲切* -> *
。我在几个不同的库中看到了相同的定义。
有没有办法从中取出光学器件?我承认我什至不知道那会做什么,而且我对镜片或常规 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
记住,lens
的 Traversal
是通过采用 traverse
的类型并让 t a
和 t b
类型变化来实现的,查看不是作为多态容器而是作为整体 blob 可遍历。
HTraversal
有多大用处,我不知道。你不能用 (.)
.