Тип типа Maybe (Lens' a b)
не работает, потому что Lens'
находится под капотом типа Rank-2, который нельзя обернуть в конструктор типа без расширения -XImpredicativeTypes
(что на самом деле не поддерживается в GHC).Как непроизвольно вернуть «Может быть» объектив?
Что, таким образом, лучший тип, чтобы дать функцию, которая бы морально иметь тип
foo :: A -> Maybe (Lens' B C)
Возможность было бы отложить Maybe
в продолжение прошедшего
foo' :: ∀ y . A -> (Lens' B C -> y) -> Maybe y
, но я не особенно подобным.
Используйте [ 'ALens'] (https://hackage.haskell.org/package/lens-4.15.1/docs/Control-Lens-Lens.html#t:ALens) может быть? –
Существует также 'ReifiedLens', который является обычным newtype wrapper.around' Lens'. Когда вы возвращаете объектив, может быть более эффективным использовать «ReifiedLens», чем «ALens», и, похоже, он одинаково удобен для пользователя. –