Size: a a a

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

2017 May 07

AK

Anton Kotenko in Elm Lang сообщество разработчиков
про memoize как раз статья открытая, да :)
источник

AK

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

at

andrei tshurotshkin! 🎄 in Elm Lang сообщество разработчиков
>In languages like Elm, functions are automatically curried and memoized.

ниче даж делать не надо получается
источник

at

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

AK

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

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
takeWhile из list-extra + values из maybe-extra, ну и map, естественно
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Что же поделать с тем, что core убогая. Вот и приходится такие вот -extra пользовать :)
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Aleksei (astynax) Pirogov
takeWhile из list-extra + values из maybe-extra, ну и map, естественно
тут f будет один раз применяться к каждому элементу
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
fusing'а не будет, это не хаскель, но в остальном будет нормально
источник

AP

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

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)
такое точно не нужно писать вручную :)
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Если уж не хочется тащить зависимости, лучше скопипастить оттуда реализации takeWhile и values и использовать эти более общие и узкоспециализированные кирпичики для построения сложной функции.
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Сильноспецифические штуки типа filterMapFoldr плохо смотрятся и сложны в отладке
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
В хаскеле stdlib побогаче, поэтому там бы я сделал
λ> import Data.Maybe

λ> import Data.List

λ> let collect f = catMaybes . takeWhile isJust . map f

λ> :t collect 

collect :: (a1 -> Maybe a) -> [a1] -> [a]
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Кстати, судя по тому, что maybe-extra и list-extra принадлежат elm-community, можно считать, что это must have и использовать свободно и повсеместно :)
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
выглядит очень красиво, но по-моему f всё равно вызывается с атрибутом 9, например
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
нет, takeWhile отбрасывает конец
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Хотя да, map же "до" будет...
источник

AK

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

AK

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