Typ taki jak Maybe (Lens' a b)
nie działa, ponieważ Lens'
jest pod maską typu Rank-2, który nie może być zawijany w konstruktorze typu bez rozszerzenia -XImpredicativeTypes
(co nie jest obsługiwane w GHC).W jaki sposób nieinwestycyjnie zwracać `Może` obiektyw?
Jaki jest więc najlepszy typ dać funkcję, która byłaby moralnie mają typ
foo :: A -> Maybe (Lens' B C)
Możliwość byłoby odroczenie Maybe
przeszedł do kontynuacji
foo' :: ∀ y . A -> (Lens' B C -> y) -> Maybe y
ale nie wiem szczególnie w tym stylu.
Użyj [ 'ALens'] (https://hackage.haskell.org/package/lens-4.15.1/docs/Control-Lens-Lens.html#t:ALens) może być? –
Istnieje również 'ReifiedLens', który jest zwykłym typem opakowania new.peound a' Lens'. Kiedy oddajesz soczewkę, bardziej efektywne może być użycie "ReifiedLens" niż "ALens", i wydaje się równie wygodne dla konsumenta. –