mam następujący prosty kodCo to jest właściwy sposób obsługi (głęboko zagnieżdżonych) funktorów?
import Data.String.Regex
import Data.Array
last <$> match someRegex " 1"
gdzie
match someRegex " 1"
powraca coś
Just ([Just (" 1"),Just (" "),Just ("1")])
i
last <$> match someRegex " 1"
zwrotów coś lik e
Just (Just (Just (" 1")))
Teraz mam głęboko zagnieżdżoną Może. Co sprawia, że ciężko z nim pracować (nawet używając funktorów). Napisałem sobie parę funkcji pomocniczych - ale jestem z tego powodu niezadowolony. To jakoś nie jest w porządku.
extract j = do
case j of
Nothing -> Nothing
Just a -> a
extract2 jj = extract $ extract jj
a następnie użycie go jak ten
extract2 $ last <$> match someRegex " 1"
Czy istnieje lepszy/idiomatyczne sposób robić takie rzeczy w Purescript/Haskell?
Jeśli nie chcesz się jeszcze łączyć, ale chcesz to zmienić, pamiętaj, że fmap można składać: 'fmap. fmap :: (Funktor f, Funktor g) => (a -> b) -> f (g a) -> f (g b) ',' fmap. fmap. fmap :: (Funktor f, Funktor g, Funktor h) => (a -> b) -> f (g (ha)) -> f (g (hb)) ' – Cubic
hmm moje pytanie było bardziej, jeśli jest sposób na uniknięcie tego zagnieżdżenia na początku – robkuz
Z 'Maybe' jest mało interesujących informacji zakodowanych w wielu warstwach, ale może nie być tak w przypadku innych funktorów (np. możesz użyć' fmap .fmap. fmap' aby odwzorować podwójnie zagnieżdżoną listą przy zachowaniu całej jej struktury). – duplode