Ho il seguente codice sempliceQual è il modo giusto per gestire i funtori (profondamente annidati)?
import Data.String.Regex
import Data.Array
last <$> match someRegex " 1"
dove
match someRegex " 1"
restituisce qualcosa come
Just ([Just (" 1"),Just (" "),Just ("1")])
e
last <$> match someRegex " 1"
restituisce qualcosa lik e
Just (Just (Just (" 1")))
Ora ho un Forse profondamente annidato. Il che rende difficile lavorare con (anche usando i funtori). Mi sono scritto un paio di funzioni di supporto - ma sono un po 'infelice. In qualche modo non sembra giusto.
extract j = do
case j of
Nothing -> Nothing
Just a -> a
extract2 jj = extract $ extract jj
E poi usarlo come questo
extract2 $ last <$> match someRegex " 1"
C'è un/modo migliore idiomatica per fare queste cose in Purescript/Haskell?
Se non vuoi ancora unirti, ma vuoi cambiarlo, ricorda che fmap è componibile: 'fmap. fmap :: (Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b) ',' fmap. fmap. fmap :: (Functor f, Functor g, Functor h) => (a -> b) -> f (g (ha)) -> f (g (hb)) ' – Cubic
hmm la mia domanda era più se c'è un modo per evitare questo nidificazione in primo luogo – robkuz
Con 'Maybe' ci sono poche informazioni interessanti codificate in più livelli, ma questo potrebbe non essere il caso con altri funtori (ad esempio si potrebbe usare' fmap. fmap. fmap' per mappare su una lista doppiamente annidata pur conservando tutta la sua struttura). – duplode