Size: a a a

Elm Lang сообщество разработчиков

2017 May 07

at

andrei tshurotshkin! 🎄 in Elm Lang сообщество разработчиков
mapMaybe
источник

at

andrei tshurotshkin! 🎄 in Elm Lang сообщество разработчиков
ток это в хаскелле
источник

at

andrei tshurotshkin! 🎄 in Elm Lang сообщество разработчиков
хотя она не так работает)
источник

at

andrei tshurotshkin! 🎄 in Elm Lang сообщество разработчиков
takeWhile  c isJust ?
источник

at

andrei tshurotshkin! 🎄 in Elm Lang сообщество разработчиков
Anton Kotenko
Ещё вопрос, есть список, скажем List a. Нужно про нему сделать map функцией (a -> Maybe b), но как только эта функция вернёт Nothing, остановить итерацию и вернуть всё собранное до этого в виде List b. (a -> Maybe b) -> List a -> List b получается.

типа... takeWhileMap или anyMap?

http://package.elm-lang.org/packages/elm-community/list-extra/6.1.0/List-Extra#iterate очень похожа, например, но работает только с одним значением. или может быть это какая-то стандартная комбинация, но чего-то не приходит в голову. filterMap, fold etc. — обходят все элементы списка, а мне это не нужно.
takeWhileMaybe f = takeWhile (f >> isJust)
источник

at

andrei tshurotshkin! 🎄 in Elm Lang сообщество разработчиков
блин, а где в элме takeWhile
источник

NK

ID:295552673 in Elm Lang сообщество разработчиков
источник

at

andrei tshurotshkin! 🎄 in Elm Lang сообщество разработчиков
а почему не в стандартной либе)
источник

NK

ID:295552673 in Elm Lang сообщество разработчиков
😀
источник

at

andrei tshurotshkin! 🎄 in Elm Lang сообщество разработчиков
блин, композиция еще с другим именем >>
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
тут бы ещё результат f положить в результирующий список :)
источник

at

andrei tshurotshkin! 🎄 in Elm Lang сообщество разработчиков
Anton Kotenko
тут бы ещё результат f положить в результирующий список :)
takeWhileMaybe f = (takeWhile (f >> isJust)) >> map f
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
не получится так, что f вызывается по два раза для каждого элемента списка — один раз при takeWhile, второй при map?
источник

at

andrei tshurotshkin! 🎄 in Elm Lang сообщество разработчиков
блин, элм же не ленивый 🤔
источник

at

andrei tshurotshkin! 🎄 in Elm Lang сообщество разработчиков
хз тогда
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
наверное надо как-то scanl обыграть или foldl, возвращать кортеж с предыдущим значением мейби и собравшимся списком, и как только предыдущее значение Nothing — возращать пустой список, уже ничего не выполняя.
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
как-то так выходит

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

Anton Kotenko in Elm Lang сообщество разработчиков
воу
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
плохо, что всё равно холостые ходы, но хотя бы в них функция f не выполняется
источник