Size: a a a

2021 January 29

ЖК

Жук Короед in Haskell
findA :: forall a f. (Alternative f) => (a -> f Bool) -> [a] -> f (Maybe a)
findA f = fmap asum . h boolToMaybe . g
  where
  g :: [a] -> [f (a,Bool)]
  g = zipWith (liftA2 (,)) . fmap pure <*> fmap f
  h :: (Bool -> a -> Maybe a) -> [f (a,Bool)] -> f [Maybe a]
  h = traverse . fmap . uncurry . flip
источник

A

Andrey in Haskell
Видимо, с Applicative только первый вариант можно
источник

к

кана in Haskell
Жук Короед
findA :: forall a f. (Alternative f) => (a -> f Bool) -> [a] -> f (Maybe a)
findA f = fmap asum . h boolToMaybe . g
  where
  g :: [a] -> [f (a,Bool)]
  g = zipWith (liftA2 (,)) . fmap pure <*> fmap f
  h :: (Bool -> a -> Maybe a) -> [f (a,Bool)] -> f [Maybe a]
  h = traverse . fmap . uncurry . flip
тут все IORef прочитаются, даже если первый будет валиден
источник

ЖК

Жук Короед in Haskell
А такое поведение считается неожиданным для подобной функции? То есть так не принято делать?
источник

ЗП

Зигохистоморфный Пре... in Haskell
Жук Короед
findA :: forall a f. (Alternative f) => (a -> f Bool) -> [a] -> f (Maybe a)
findA f = fmap asum . h boolToMaybe . g
  where
  g :: [a] -> [f (a,Bool)]
  g = zipWith (liftA2 (,)) . fmap pure <*> fmap f
  h :: (Bool -> a -> Maybe a) -> [f (a,Bool)] -> f [Maybe a]
  h = traverse . fmap . uncurry . flip
filterA g >=> safeHead?
источник

к

кана in Haskell
думаю да, суть find же обычно в том, что он находит первый подходящий и дальше не идет
источник

ЖК

Жук Короед in Haskell
😱
Бегу пробовать, чувствуя себя дураком 😅
источник

к

кана in Haskell
это тоже по всем значениям пройдет
источник

ЗП

Зигохистоморфный Пре... in Haskell
Жук Короед
😱
Бегу пробовать, чувствуя себя дураком 😅
filterA не из base
источник

ЗП

Зигохистоморфный Пре... in Haskell
источник

ЖК

Жук Короед in Haskell
Ну и ладно, для монады тоже пойдет 😁
Лишь бы тысячи кода не писать
источник

ЗП

Зигохистоморфный Пре... in Haskell
кана
это тоже по всем значениям пройдет
а лень не спасет?
источник

к

кана in Haskell
нет, эффекты же
источник

ЗП

Зигохистоморфный Пре... in Haskell
тогда сделать foldMap via First
источник

ЗП

Зигохистоморфный Пре... in Haskell
если нужно первый найти
источник

A

Andrey in Haskell
Жук Короед
findA :: forall a f. (Alternative f) => (a -> f Bool) -> [a] -> f (Maybe a)
findA f = fmap asum . h boolToMaybe . g
  where
  g :: [a] -> [f (a,Bool)]
  g = zipWith (liftA2 (,)) . fmap pure <*> fmap f
  h :: (Bool -> a -> Maybe a) -> [f (a,Bool)] -> f [Maybe a]
  h = traverse . fmap . uncurry . flip
findA :: Applicative f => (a -> f Bool) -> [a] -> f (Maybe a)
findA g s = asum <$> traverse g' s where
                   g' a = (\b -> if b then Just a else Nothing) <$> g a

Может так?
источник

ЗП

Зигохистоморфный Пре... in Haskell
так надо найти последний или первый?
источник

A

Andrey in Haskell
О, интересно
источник

ЖК

Жук Короед in Haskell
Зигохистоморфный Препроморфизм
тогда сделать foldMap via First
А это как? 👀
разве Applicative f => Monoid (First (f a)) ?
источник

ЗП

Зигохистоморфный Пре... in Haskell
источник