使这个“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 i
(getIndex
的完全量化类型)将与 forall s i. s -> (i, i)
同构,但无人居住(这意味着 () -> (Void, Void)
与 s ~ ()
和 i ~ Void
).
是否可以制作具有以下类型的光学器件:
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 i
(getIndex
的完全量化类型)将与 forall s i. s -> (i, i)
同构,但无人居住(这意味着 () -> (Void, Void)
与 s ~ ()
和 i ~ Void
).