是否有 `prism' id Just` 的 `id`?
Is there an `id` of `prism' id Just`?
我有一个函数叫做:
mapRouteEncoder ::
Prism' FilePath FilePath ->
Prism' r1 r2 ->
(b -> a) ->
RouteEncoder a r1 ->
RouteEncoder b r2
这个函数通常通过在前两个参数中指定“身份”棱镜(如果我们可以这样称呼它)来使用,因为只指定了第三个函数,即:
stringRouteEncoder
& mapRouteEncoder (prism' id Just) (prism' id Just) changeModel
我使用 optics-core
,那个库中有什么东西可以代替 prism' id Just
更惯用的东西吗?
我不熟悉那个包的习语,但我很想使用 castOptic equality
将身份 Iso
变成 Prism
。这似乎很好地理解了这个想法。但是,我希望在大多数情况下您实际上 不需要 将其转换为 Prism
;您大概可以使用接受 Iso
和 Prism
.
的多态函数(如 preview
和 review
)
在你的情况下,我怀疑正确的方法是写类似
的东西
mapRouteEncoder ::
( p1 `Is` A_Prism
, p2 `Is` A_Prism) =>
Optic' p1 ixy1 FilePath FilePath ->
Optic' p2 ixy2 r1 r2 ->
(b -> a) ->
RouteEncoder a r1 ->
RouteEncoder b r2
我有一个函数叫做:
mapRouteEncoder ::
Prism' FilePath FilePath ->
Prism' r1 r2 ->
(b -> a) ->
RouteEncoder a r1 ->
RouteEncoder b r2
这个函数通常通过在前两个参数中指定“身份”棱镜(如果我们可以这样称呼它)来使用,因为只指定了第三个函数,即:
stringRouteEncoder
& mapRouteEncoder (prism' id Just) (prism' id Just) changeModel
我使用 optics-core
,那个库中有什么东西可以代替 prism' id Just
更惯用的东西吗?
我不熟悉那个包的习语,但我很想使用 castOptic equality
将身份 Iso
变成 Prism
。这似乎很好地理解了这个想法。但是,我希望在大多数情况下您实际上 不需要 将其转换为 Prism
;您大概可以使用接受 Iso
和 Prism
.
preview
和 review
)
在你的情况下,我怀疑正确的方法是写类似
的东西mapRouteEncoder ::
( p1 `Is` A_Prism
, p2 `Is` A_Prism) =>
Optic' p1 ixy1 FilePath FilePath ->
Optic' p2 ixy2 r1 r2 ->
(b -> a) ->
RouteEncoder a r1 ->
RouteEncoder b r2