Ответ 1
Я думаю, что вы хотите
non :: Eq a => a -> Iso a (Maybe a)
non foo
существенно
case someMaybe of
Nothing -> foo
Just a -> a
В вашем случае
someMap ^. at 1 . non ""
Кстати, это как раз пример non
docs.
Если вы хотите использовать это с ix
, вам не повезло, но вы всегда можете сделать
-- Import Data.Monoid
defaulting :: a -> s -> Getting (First a) s a -> a
defaulting a s fold = fromMaybe a $ s ^? fold
foo = defaulting 0 [1, 2, 3] $ ix 3 -- 0