के साथ जिपर में कदम उठाने के साथ मैं lens और zippers के साथ संघर्ष कर रहा हूं। नीचे दिए गए कोड पर विचार करें ghci
'to` lens
> 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 बिना यह करने के लिए कोई तरीका है '(\ (ए क) -> एक)' समारोह? क्या मैं अभी यहां 'अपरिभाषित' पास कर सकता हूं यदि मेरे मामले में यह स्पष्ट नहीं है? – remdezx
वास्तव में नहीं। समस्या यह है कि आप बैक अप नहीं कर पाएंगे। वापस पाने के लिए 'ऊपर की ओर' का उपयोग करना 'अपरिभाषित' होगा। – cchalmers
मुझे लगता है ... क्या 'आईएसओ' से कोई अन्य विकल्प हैं? – remdezx