at
Size: a a a
at
at
at
at
at
List a
. Нужно про нему сделать map
функцией (a -> Maybe b)
, но как только эта функция вернёт Nothing
, остановить итерацию и вернуть всё собранное до этого в виде List b
. (a -> Maybe b) -> List a -> List b
получается.takeWhileMap
или anyMap
?filterMap
, fold
etc. — обходят все элементы списка, а мне это не нужно.takeWhileMaybe f = takeWhile (f >> isJust)
at
at
NK
at
>>
AK
f
положить в результирующий список :)at
f
положить в результирующий список :)takeWhileMaybe f = (takeWhile (f >> isJust)) >> map f
AK
f
вызывается по два раза для каждого элемента списка — один раз при takeWhile
, второй при map
?at
at
AK
scanl
обыграть или foldl
, возвращать кортеж с предыдущим значением мейби и собравшимся списком, и как только предыдущее значение Nothing
— возращать пустой список, уже ничего не выполняя.AK
takeWhileMap : (a -> Maybe b) -> List a -> List b
takeWhileMap f src =
Tuple.second
(List.foldl
(\item acc ->
case acc of
( True, res ) ->
case (f item) of
Just val -> ( True, res ++ [ val ] )
Nothing -> ( False, res )
( False, res ) -> acc)
( True, [] )
src)
AK
f
не выполняется