Ich habe Probleme mit lens und zippers. Betrachten wir unter Code ausführen in ghci
Schritt in den Reißverschluss mit `to` Objektiv
> 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)
Mit data A t = A t
, wie kann ich Art von Reißverschluss schaffen wie: Control.Monad.MonadPlus m => m (Zipper Top Int [Int] :>> A Int)
?
Ich versuchte within (ix 1 . to A) $ zipper ([1,2,3] :: [Int])
aber es gibt einen Fehler:
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)
Gibt es eine Möglichkeit, es ohne specyfing zu tun '(\ (A a) -> a)' Funktion? Kann ich hier einfach "undefiniert" durchgehen, wenn es in meinem Fall nicht so offensichtlich ist? – remdezx
Nicht wirklich. Das Problem ist, dass Sie nicht in der Lage sein werden, wieder aufzustehen. Die Verwendung von "nach oben", um wieder herauszukommen, würde ein "undefiniert" ergeben. – cchalmers
Ich sehe ... Gibt es andere Optionen als 'Iso'? – remdezx