cutsea110
ああ失礼。私も今Settingsに到達しました.
all isJust
でチェックしてから map fromJust
しているところなどがとてもダサく感じています。>>=
を繋げるみたいな感じでかっこよく書きたいです。Data.Maybe
にあるこの関数でイケると思います http://hackage.haskell.org/package/base-4.12.0.0/docs/Data-Maybe.html#v:catMaybesvalues
が増えてたので期待する動作がわからなく……get :: [Maybe a] -> Maybe [a] get = undefined some :: [Maybe Char] -> [Maybe Int] -> Maybe (Map Char Int) some keys values = do k <- get keys v <- get values return Map.fromList $ zip k v
foo xs ys = sequenceA $ zipWith f xs ys where f mx my = do { x <- mx; y <- my; return (x, y) }
f
を liftA2 (,)
で書けば1行で行けるsome :: [Maybe String] -> [Maybe Int] -> Maybe (M.Map String Int) some keys values = do k <- sequence keys v <- sequence values return $ M.fromList $ zip k v
some :: (Ord key) => [Maybe key] -> [Maybe value] -> Maybe (M.Map key value) some keys values = do k <- sequence keys v <- sequence values return $ M.fromList $ zip k v
fmap M.fromList $ zipWithM (liftA2 (,)) keys values
sumAndLength xs = (sum xs, length xs)
長いリストを持っている時点でメモリ上に長いリストが展開されているそれはその通りです。
let keys = [Just (show n )| n <- [1..] ]
M.Map String Int
がO(n)のメモリを消費するのであまり気にしなくてもいい気がします。