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
一起使用type 参数化一个类型,决定值是具体的还是抽象的。 t
有一种 (* -> *) -> *
并且是一个高阶仿函数,尽管它们实际上没有那个类,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
有多有用。你不能用 (.)
很好地组合它们。
关于haskell - 高阶可遍历仿函数是否有相应的光学器件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47024808/