haskell - 高阶可遍历仿函数是否有相应的光学器件?

标签 haskell haskell-lens category-theory traversable haskell-hedgehog

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 , gh 有种 * -> *。我在几个不同的库中看到了相同的定义。

有没有办法从中获取光学元件?我承认我什至不知道它会做什么,而且我对镜头或常规 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 有多有用。你不能用 (.) 很好地组合它们。

关于haskell - 高阶可遍历仿函数是否有相应的光学器件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47024808/

相关文章:

haskell - 如何制作两个透镜的乘积?

haskell - 缩放和免费 monad 的困难

haskell - fmap 的自由定理

monads - 具有两种状态变量类型(输入和输出)的状态单子(monad)仍然是单子(monad)吗?

Haskell 无法将预期类型 [char] 与实际类型 IO 匹配

Haskell 赋值类型

Haskell - 采用相同映射的函数映射

haskell - Haskell 有 foldlM' 吗?

haskell - 使用 Haskell 镜头库,我如何将 setter/getter 视为 `first class' ?

c++ - C++ 中的 Reader 仿函数