Re: [Haskell-cafe] How to understand `|` in this code snippet ?

2010-02-27 Thread zaxis

thanks! 

case timeout of
  Just str ->
case reads str of
  [(t,_)] -> addtimeout (hPutStrLn stderr "*** TIMEOUT" >> _exit 1)
  _ -> return ()
  _ -> return () 

is VERY clear!


Daniel Fischer-4 wrote:
> 
> 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 universityKF8NH
> 
> ___
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
> 
> 


-
fac n = let {  f = foldr (*) 1 [1..n] } in f 
-- 
View this message in context: 
http://old.nabble.com/How-to-understand-%60%7C%60-in-this-code-snippet---tp27726581p27732673.html
Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] How to understand `|` in this code snippet ?

2010-02-27 Thread Felipe Lessa
On Sat, Feb 27, 2010 at 05:08:18PM -0800, zaxis wrote:
> Then can i change it to :
> case timeout of
> Just str -> do
> [(t, _)] <- reads str
> addTimeout t (hPutStrLn stderr "*** TIMEOUT" >> _exit 1)
> return ()
> _ -> return ()

No, that's different.  You could change it to:

case timeout of
  Just str -> case reads str of
[(t, _)] -> do addTimeout t (hPutStrLn stderr "*** TIMEOUT" >> _exit 1)
   return ()
_-> other -- (1)
  _-> other -- (2)
where other = return ()

The cases (1) and (2) are the same and simulate the fact that
when the pattern guard fails, then execution falls to the next
case.

Of course you could just write

case fmap (reads str) timeout of
  Just [(t, _)] -> ...
  _ -> ...

HTH,

--
Felipe.
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] How to understand `|` in this code snippet ?

2010-02-27 Thread Daniel Fischer
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 universityKF8NH

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] How to understand `|` in this code snippet ?

2010-02-27 Thread 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!


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 universityKF8NH
> 
> 
> 
>  
> ___
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
> 
> 


-
fac n = let {  f = foldr (*) 1 [1..n] } in f 
-- 
View this message in context: 
http://old.nabble.com/How-to-understand-%60%7C%60-in-this-code-snippet---tp27726581p27732364.html
Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] How to understand `|` in this code snippet ?

2010-02-27 Thread Ben Millwood
On Sat, Feb 27, 2010 at 9:29 AM, 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).
>

In fact it seems to be a pattern guard, which (until recently) are
(were) a non-standard extension:
http://www.haskell.org/ghc/docs/latest/html/users_guide/syntax-extns.html#pattern-guards
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] How to understand `|` in this code snippet ?

2010-02-27 Thread Brandon S. Allbery KF8NH

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 universityKF8NH




PGP.sig
Description: This is a digitally signed message part
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] How to understand `|` in this code snippet ?

2010-02-27 Thread Lee Duhem
On Sat, Feb 27, 2010 at 5:07 PM, 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 part of a case expression, see
http://www.haskell.org/onlinereport/exps.html#sect3.13

lee
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] How to understand `|` in this code snippet ?

2010-02-27 Thread zaxis

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` ? 

Sincerely!



-
fac n = let {  f = foldr (*) 1 [1..n] } in f 
-- 
View this message in context: 
http://old.nabble.com/How-to-understand-%60%7C%60-in-this-code-snippet---tp27726581p27726581.html
Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe