[英]How to non-impredicatively return `Maybe` a lens?
像Maybe (Lens' ab)
這樣的類型不起作用,因為Lens'
在引擎蓋下是Rank-2類型,不能在沒有-XImpredicativeTypes
擴展的類型構造函數中-XImpredicativeTypes
(在GHC中不支持) 。
因此,提供一個在道德上具有類型的函數的最佳類型是什么
foo :: A -> Maybe (Lens' B C)
一種可能性是將Maybe
推遲到一個通過的延續
foo' :: ∀ y . A -> (Lens' B C -> y) -> Maybe y
但我並不特別喜歡。
這就是Control.Lens.Reified
模塊的用途。 它包含newtype
的包裝lens
層次。
foo :: A -> Maybe (ReifiedLens' B C)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.