Send Beginners mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
or, via email, send a message with subject or body 'help' to
[email protected]
You can reach the person managing the list at
[email protected]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."
Today's Topics:
1. Re: how to skip pattern match error when applying a mapM_
(Daniel Trstenjak)
2. Re: how to skip pattern match error when applying a mapM_
(jean verdier)
3. Re: how to skip pattern match error when applying a mapM_
(Daniel Trstenjak)
4. Re: how to skip pattern match error when applying a mapM_
(PICCA Frederic-Emmanuel)
5. Re: how to skip pattern match error when applying a mapM_
(Daniel Trstenjak)
6. Re: how to skip pattern match error when applying a mapM_
(PICCA Frederic-Emmanuel)
7. Re: how to skip pattern match error when applying a mapM_
(Daniel Trstenjak)
----------------------------------------------------------------------
Message: 1
Date: Tue, 17 Jan 2017 19:06:11 +0100
From: Daniel Trstenjak <[email protected]>
To: [email protected]
Subject: Re: [Haskell-beginners] how to skip pattern match error when
applying a mapM_
Message-ID: <20170117180611.GA16815@octa>
Content-Type: text/plain; charset=us-ascii
Hi Frederic,
On Tue, Jan 17, 2017 at 05:34:05PM +0000, PICCA Frederic-Emmanuel wrote:
> I tought that was the purpose of the Monad to avoid writting these
> boillerplate ?
>
> What I am missing ?
You don't pattern match on 'Just' but just write:
gamma <- get_position' (h5gamma d) 0
delta <- get_position' (h5delta d) idx
wavelength <- get_position' (h5wavelength d) 0
If e.g. 'gamma' is 'Nothing', then the following expressions aren't evaluated
and the whole "do-block" returns 'Nothing'.
Greetings,
Daniel
------------------------------
Message: 2
Date: Tue, 17 Jan 2017 19:17:10 +0100
From: jean verdier <[email protected]>
To: [email protected]
Subject: Re: [Haskell-beginners] how to skip pattern match error when
applying a mapM_
Message-ID: <[email protected]>
Content-Type: text/plain; charset="UTF-8"
Just x <- y
is a construction similar to
let Just x = y
which is the same as
x = case y of
Just z -> z
Nothing -> error "pattern match failed"
Some matches are mapped to errors but not explicitly.
Just x = y
avoid some boilerplate at the cost of hiding the non exhaustive matches
that may raise unexpected errors.
Just x <- y
is the same as
z <- y
let x = case z of ...
On Tue, 2017-01-17 at 17:34 +0000, PICCA Frederic-Emmanuel wrote:
> >
> > Just gamma <- get_position' (h5gamma d) 0
> > Just delta <- get_position' (h5delta d) idx
> > Just wavelength <- get_position' (h5wavelength d) 0
>
> >
> > is asking for a trouble down the road. Use a case to pattern match
> > on nothing, (or `maybe`, or LambdaCase if you are into extensions).
>
> I tought that was the purpose of the Monad to avoid writting these
> boillerplate ?
>
> What I am missing ?
>
> Cheers
>
> Frederic
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
------------------------------
Message: 3
Date: Tue, 17 Jan 2017 19:21:38 +0100
From: Daniel Trstenjak <[email protected]>
To: [email protected]
Subject: Re: [Haskell-beginners] how to skip pattern match error when
applying a mapM_
Message-ID: <20170117182138.GB16815@octa>
Content-Type: text/plain; charset=us-ascii
> If e.g. 'gamma' is 'Nothing', then the following expressions aren't evaluated
> and the whole "do-block" returns 'Nothing'.
I just saw that 'row' isn't operating in the 'Maybe' monad but in the 'IO'
monad,
so this wont work.
I don't know if 'row' contains any side effects that should also be
executed if the returned 'Maybe' is 'Nothing', if this isn't the case,
then you might be able to switch the return type of 'row' from
'IO (Maybe ...)' to 'Maybe (IO ...)' and then you could get the
described behaviour for 'Maybe'.
Greetings,
Daniel
------------------------------
Message: 4
Date: Tue, 17 Jan 2017 19:44:31 +0000
From: PICCA Frederic-Emmanuel
<[email protected]>
To: "The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell" <[email protected]>
Subject: Re: [Haskell-beginners] how to skip pattern match error when
applying a mapM_
Message-ID:
<a2a20ec3b8560d408356cac2fc148e53bb329...@sun-dag3.synchrotron-soleil.fr>
Content-Type: text/plain; charset="us-ascii"
> I don't know if 'row' contains any side effects that should also be
> executed if the returned 'Maybe' is 'Nothing', if this isn't the case,
> then you might be able to switch the return type of 'row' from
> 'IO (Maybe ...)' to 'Maybe (IO ...)' and then you could get the
> described behaviour for 'Maybe'.
As soon as one side effect return Nothing, it should stop the IO monad.
so I should definitiely switch to Maybe IO
now how can I know the behaviour in between the line of a Monad.
I aimagine that this is the purpose of the bind method (>>=).
Where is this defined for Maybe and IO ?
Thanks
Frederic
------------------------------
Message: 5
Date: Tue, 17 Jan 2017 21:36:37 +0100
From: Daniel Trstenjak <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] how to skip pattern match error when
applying a mapM_
Message-ID: <[email protected]>
Content-Type: text/plain; charset="utf-8"
> now how can I know the behaviour in between the line of a Monad.
> I aimagine that this is the purpose of the bind method (>>=).
Yes, that's the case.
> Where is this defined for Maybe and IO ?
You just look at the Monad instance for the type. IO is a bit special, but
here is the one for Maybe[1].
Greetings,
Daniel
[1]
http://hackage.haskell.org/package/base-4.9.1.0/docs/src/GHC.Base.html#line-665
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://mail.haskell.org/pipermail/beginners/attachments/20170117/804cf018/attachment-0001.html>
------------------------------
Message: 6
Date: Tue, 17 Jan 2017 20:46:32 +0000
From: PICCA Frederic-Emmanuel
<[email protected]>
To: "The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell" <[email protected]>
Subject: Re: [Haskell-beginners] how to skip pattern match error when
applying a mapM_
Message-ID:
<a2a20ec3b8560d408356cac2fc148e53bb329...@sun-dag3.synchrotron-soleil.fr>
Content-Type: text/plain; charset="us-ascii"
> You just look at the Monad instance for the type. IO is a bit special, but
> here is the one for Maybe[1].
thanks and what is the purpose of
fail _ = nothing
Cheers
Fred
------------------------------
Message: 7
Date: Tue, 17 Jan 2017 22:28:47 +0100
From: Daniel Trstenjak <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] how to skip pattern match error when
applying a mapM_
Message-ID: <[email protected]>
Content-Type: text/plain; charset=utf-8
> thanks and what is the purpose of
>
> fail _ = nothing
’fail’ is called for pattern match errors, pretty much the error you’ve got
from ’Just x <- ...’.
The IO Monad instance raises the exception you've seen.
For the Maybe Monad instance just 'Nothing' is returned.
Greetings,
Daniel
------------------------------
Subject: Digest Footer
_______________________________________________
Beginners mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
------------------------------
End of Beginners Digest, Vol 103, Issue 15
******************************************