関数型プログラミング言語Haskell Part18
■ このスレッドは過去ログ倉庫に格納されています
0274デフォルトの名無しさん
2012/05/03(木) 00:29:59.11これは要素があっても[IO a]が無限リストなら停止しないよ
findM' :: Monad m => (c -> m Bool) -> [m c] -> m c
findM' f = head <=< filterM (join . liftM f)
一方、こっちは要素があれば止まる(無ければ止まらない)
findM :: Monad m => (a -> m Bool) -> [m a] -> m (Maybe a)
findM f [] = return Nothing
findM f (x:xs) = do
v <- x
t <- f v
if t then return $ Just v else findM f xs
テストしてみれば分かる
ms :: [IO Int]
ms = map return [1..]
main = do
--print =<< findM' (return . (> 10)) ms
print =<< findM (return . (> 10)) ms
■ このスレッドは過去ログ倉庫に格納されています