Я борюсь с lens и zippers. Рассмотрим ниже код запустить в ghci
вступая в застежку -молнию с объективом `to`
> import Control.Lens
> import Control.Zipper
>
> :t within (ix 1) $ zipper ([1,2,3] :: [Int])
> within (ix 1) $ zipper ([1,2,3] :: [Int])
:: Control.Monad.MonadPlus m => m (Zipper Top Int [Int] :>> Int)
Имея data A t = A t
, как я могу создать тип застежки-молнии, как: Control.Monad.MonadPlus m => m (Zipper Top Int [Int] :>> A Int)
?
Я попытался within (ix 1 . to A) $ zipper ([1,2,3] :: [Int])
, но он дает ошибку:
Could not deduce (Contravariant
(Bazaar (Indexed Int) (A Int) (A Int)))
arising from a use of ‘to’
from the context (Control.Monad.MonadPlus m)
bound by the inferred type of
it :: Control.Monad.MonadPlus m =>
m (Zipper Top Int [Int] :>> A Int)
at Top level
In the second argument of ‘(.)’, namely ‘to A’
In the first argument of ‘within’, namely ‘(ix 1 . to A)’
In the expression: within (ix 1 . to A)
Есть ли способ сделать это без specyfing '(\ (Аа) -> а)' функция? Могу ли я просто передать здесь 'undefined', если в моем случае это не так очевидно? – remdezx
Не совсем. Проблема в том, что вы не сможете вернуться. Использование 'upward' для возврата обратно даст« undefined ». – cchalmers
Я вижу ... Есть ли другие варианты, кроме 'Iso'? – remdezx