使这个“getIndex”光学器件成为可能吗?

Is making this `getIndex` optic possible?

是否可以制作具有以下类型的光学器件:

getIndex :: Lens.IndexedGetter i a i

我找不到现有的,并且在尝试编写一个失败时我觉得它无法完成,但如果是这样的话,我想知道为什么会这样。

索引是由getter任意定义的,所以没有通用的创建方法。

IndexedGetter i s i 通过以下双射同构于 s -> (i, i)

ito   :: (s -> (i, a)) -> IndexedGetter i s a
iview :: IndexedGetter i s a -> s -> (i, a)

forall s i. IndexedGetter i s igetIndex 的完全量化类型)将与 forall s i. s -> (i, i) 同构,但无人居住(这意味着 () -> (Void, Void)s ~ ()i ~ Void).