有排名为N的镜头吗?

7

假设我有一个简单的GADT。

data Expr a where
  Int' :: Integer -> Expr Int
  Fun :: Text -> Expr a
  (:*) :: Expr (a -> b) -> Expr a -> Expr b

现在,我可以对其定义以下遍历方式:
transform :: Applicative f => (forall b. Expr b -> f (Expr b)) -> Expr a -> f (Expr a)
transform f (a :* b) = (:*) <$> transform f a <*> transform f b
transform f v = f v

这个类型看起来非常像镜头中的Traversal。 但是并不完全相同,它的级别更高。

我仍然可以定义“传统”的setoverview更加复杂,有一些需要避免的障碍(包括无法确定的类型),但是可行。

这种构造有一个名称吗? 它是否得到现有的镜头库支持或研究?

1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接