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)のメモリを消費するのであまり気にしなくてもいい気がします。