有N级镜头吗?

gre*_*ake 7 haskell haskell-lens

假设我有一个简单的 GADT。

\n
data Expr a where\n  Int\' :: Integer -> Expr Int\n  Fun :: Text -> Expr a\n  (:*) :: Expr (a -> b) -> Expr a -> Expr b\n
Run Code Online (Sandbox Code Playgroud)\n

现在,我可以定义以下遍历:

\n
transform :: Applicative f => (forall b. Expr b -> f (Expr b)) -> Expr a -> f (Expr a)\ntransform f (a :* b) = (:*) <$> transform f a <*> transform f b\ntransform f v = f v\n
Run Code Online (Sandbox Code Playgroud)\n

奇怪的是,从镜头上看,这种类型很像Traversal。然而,不完全是,它的排名更高。

\n

我仍然可以定义 \xc2\xabconventional\xc2\ setxbb overview更复杂,有一些障碍需要避免(命令式类型),但可行。

\n

这个建筑有名字吗?现有镜头库是否以任何方式支持或研究过它?

\n

yai*_*chu 1

并不是真正的答案,只是额外的相关指针: