Size: a a a

PureScript — русскоговорящее сообщество

2018 March 19

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
немного запутался всё равно, for_ игнорирует результат и выполняет эффекты:

for_ = flip traverse_

traverse_
 :: forall a b f m
  . Applicative m
 => Foldable f
 => (a -> m b)
 -> f a
 -> m Unit
traverse_ = foldr ((*>) <<< f) (pure unit)


то есть по сути for_ это:

foldr ((*>) <<< (\item -> f item)) (pure unit) array


Пытаюсь через это вывести свой forIndexed_ используя foldrWithIndex вместо foldr, но очевидно теряю apply и не знаю как его вставить правильно:

forIndexed_
   :: forall i f a m
   . FoldableWithIndex i f => Applicative m
   => f a -> (i -> a -> m Unit) -> m Unit
forIndexed_ array f =
   foldrWithIndex (\idx elm _ -> f idx elm) (pure unit) array


такой код компилится, но выполняется даже для массивов с несколькими элементами только один раз
источник

к

кана in PureScript — русскоговорящее сообщество
а где ты там эффекты композишь?
источник

к

кана in PureScript — русскоговорящее сообщество
по сути ты их там сбрасываешь и на выходе будет только последний эффект
источник

к

кана in PureScript — русскоговорящее сообщество
точнее первый
источник

к

кана in PureScript — русскоговорящее сообщество
foldr же
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
да, видимо так и происходит, но как сделать чтобы их не сбрасывать?
источник

к

кана in PureScript — русскоговорящее сообщество
как-нибудь типа
foldrWithIndex
 (\idx elm m -> m *> f idx elm)
 (pure unit)
 array
источник

к

кана in PureScript — русскоговорящее сообщество
но там хз что с порядком выполнения эффектов будет
источник

к

кана in PureScript — русскоговорящее сообщество
ну то есть не хз, они там с конца выполнятся
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
нужна свертка с эффектом? вроде это foldM или с индексом тут
https://github.com/purescript/purescript-foldable-traversable/blob/master/src/Data/FoldableWithIndex.purs#L160
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
оно! да, теперь задом наперёд
источник

к

кана in PureScript — русскоговорящее сообщество
для нормального порядка нужен foldl
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
не обязательно
источник

к

кана in PureScript — русскоговорящее сообщество
а ну можно еще флипнуть порядок аргументов
источник

к

кана in PureScript — русскоговорящее сообщество
f idx elm *> m
источник

к

кана in PureScript — русскоговорящее сообщество
чет не подумал
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
да, то что надо:

foldlWithIndex
   (\idx m elm -> m *> f idx elm) (pure unit) array
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
Anton Kotenko
да, то что надо:

foldlWithIndex
   (\idx m elm -> m *> f idx elm) (pure unit) array
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
а, понял, велосипед переизобретаю?
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
ну вроде)
источник