Am Sonntag 28 Februar 2010 02:08:18 schrieb zaxis: > Then can i change it to : > case timeout of > Just str -> do > [(t, _)] <- reads str > addTimeout t (hPutStrLn stderr "*** TIMEOUT" >> _exit 1) > return () > _ -> return () > > Sincerely!
No. The "| [(t,_)] <- reads str" in case timeout of Just str | [(t,_)] <- reads str -> ... is a "pattern guard", not a monadic bind (and where "p <- reads str" is a monadic bind, it's in the list monad). You can change it to case timeout of Just str -> case reads str of [(t,_)] -> addtimeout (hPutStrLn stderr "*** TIMEOUT" >> _exit 1) _ -> return () _ -> return () but why would you? > > Brandon S. Allbery KF8NH wrote: > > On Feb 27, 2010, at 04:07 , zaxis wrote: > >> xxxMain = do > >> timeout <- getEnv "xxx_TIMEOUT" > >> case timeout of > >> Just str | [(t, _)] <- reads str -> do > >> addTimeout t (hPutStrLn stderr "*** TIMEOUT" >> _exit 1) > >> return () > >> _ -> return () > >> ....... > >> > >> What does the `|` mean in "Just str | [(t, _)] <- reads str" ? > >> Is it a logical `or` ? > > > > It's a guard. Same as with function definitions (in fact, function > > definitions of that form are converted to case expressions). > > > > -- > > brandon s. allbery [solaris,freebsd,perl,pugs,haskell] > > allb...@kf8nh.com system administrator [openafs,heimdal,too many hats] > > allb...@ece.cmu.edu electrical and computer engineering, carnegie > > mellon university KF8NH _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe