LINUX.ORG.RU

Haskell, (a-> IO b) как предикат для find

 


0

2

Немного тыкаю Хаскель, и столкнулся с такой задачей: Допустим, есть список [«a»,«b»,«c»] и функция с типом String -> IO Bool (скажем, ищет в базе и т.п.)

Есть ли что-то, что можно сделать, чтобы использовать эту функцию в качестве предиката для Data.List.find? Разумеется, внутри монады IO.

★★
Ответ на: комментарий от qnikst

на держи, мне спать пора

λ> :t Data.Foldable.foldlM (\x y -> do t <- pr y ; return $ if t then y:x else x)
Data.Foldable.foldlM (\x y -> do t <- pr y ; return $ if t then y:x else x)
  :: Foldable t => [a] -> t a -> IO [a]

pr:: a -> IO Bool

qnikst ★★★★★
()
Последнее исправление: qnikst (всего исправлений: 1)

Вообще говоря нет. Это называется сильная ТИПИЗАЦИЯ.

KblCb ★★★★★
()
Ответ на: комментарий от dmitry_malikov

ну я думаю проще заюзать foldable.. хотя и написать аналогичную штуку не сложно.

qnikst ★★★★★
()

Всех благодарю. С фолдом я сразу написал, как с этим столкнулся, но было интересно, нет ли еще более элегантных методов.

keyran ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.