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. Parser using the show method (PICCA Frederic-Emmanuel)
2. Re: Parser using the show method (Tobias Brandt)
3. Re: Parser using the show method (Francesco Ariis)
4. Re: Parser using the show method (PICCA Frederic-Emmanuel)
----------------------------------------------------------------------
Message: 1
Date: Fri, 21 Jun 2019 08:05:21 +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: [Haskell-beginners] Parser using the show method
Message-ID:
<a2a20ec3b8560d408356cac2fc148e53015bbbc...@sun-dag3.synchrotron-soleil.fr>
Content-Type: text/plain; charset="us-ascii"
Hello,
I have a data type like this
data SpaceGroup = P1 | P2 | P21 | C2 | P222 | P2221 | P21212 | P212121 | C222 |
C2221 | F222 | I222 | I212121 | P4 | P41 | P42 | P43 | P422 | P4212 | P4122 |
P41212 | P4222 | P42212 | P4322 | P43212 | I4 | I41 | I422 | I4122 | P3 | P31 |
P32 | P312 | P321 | P3112 | P3121 | P3212 | P3221 | P6 | P61 | P62 | P63 | P64
| P65 | P622 | P6122 | P6522 | P6222 | P6422 | P6322 | R3 | R32 | P23 | P213 |
P432 | P4232 | P4332 | P4132 | F23 | F432 | F4132 | I23 | I213 | I432 | I4132
deriving (Show)
has you can see it is quite long.
I want to write a method in order to parser a string using the show method.
myparser :: Parser SpaceGroup
myparser = do
...
I do not want to write for each constructor something like
do
t <- takeText
if t == "P21" then P21 else ...
thanks for your help
Frederic
------------------------------
Message: 2
Date: Fri, 21 Jun 2019 14:02:02 +0200
From: Tobias Brandt <[email protected]>
To: [email protected]
Subject: Re: [Haskell-beginners] Parser using the show method
Message-ID: <[email protected]>
Content-Type: text/plain; charset=utf-8; format=flowed
Hello,
you may derive an Enum instance for your SpaceGroup type and then
generate all enumerations:
data SpaceGroup = P1 | P2 | P21 | C2 | P222 | P2221 | P21212 | P212121 |
C222 | C2221 | F222 | I222 | I212121 | P4 | P41 | P42 | P43 | P422 |
P4212 | P4122 | P41212 | P4222 | P42212 | P4322 | P43212 | I4 | I41 |
I422 | I4122 | P3 | P31 | P32 | P312 | P321 | P3112 | P3121 | P3212 |
P3221 | P6 | P61 | P62 | P63 | P64 | P65 | P622 | P6122 | P6522 | P6222
| P6422 | P6322 | R3 | R32 | P23 | P213 | P432 | P4232 | P4332 | P4132 |
F23 | F432 | F4132 | I23 | I213 | I432 | I4132
deriving (Show, Enum)
matches t = t `elem` map show [P1 .. I4132]
But of course this should not be as efficient as writing every
constructor case by hand.
Tobias
On 6/21/19 10:05 AM, PICCA Frederic-Emmanuel wrote:
> Hello,
>
> I have a data type like this
>
> data SpaceGroup = P1 | P2 | P21 | C2 | P222 | P2221 | P21212 | P212121 | C222
> | C2221 | F222 | I222 | I212121 | P4 | P41 | P42 | P43 | P422 | P4212 | P4122
> | P41212 | P4222 | P42212 | P4322 | P43212 | I4 | I41 | I422 | I4122 | P3 |
> P31 | P32 | P312 | P321 | P3112 | P3121 | P3212 | P3221 | P6 | P61 | P62 |
> P63 | P64 | P65 | P622 | P6122 | P6522 | P6222 | P6422 | P6322 | R3 | R32 |
> P23 | P213 | P432 | P4232 | P4332 | P4132 | F23 | F432 | F4132 | I23 | I213 |
> I432 | I4132
> deriving (Show)
>
> has you can see it is quite long.
>
> I want to write a method in order to parser a string using the show method.
>
> myparser :: Parser SpaceGroup
> myparser = do
> ...
>
> I do not want to write for each constructor something like
>
> do
> t <- takeText
> if t == "P21" then P21 else ...
>
> thanks for your help
>
> Frederic
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
------------------------------
Message: 3
Date: Fri, 21 Jun 2019 14:09:36 +0200
From: Francesco Ariis <[email protected]>
To: [email protected]
Subject: Re: [Haskell-beginners] Parser using the show method
Message-ID: <[email protected]>
Content-Type: text/plain; charset=us-ascii
Hello Frederic,
On Fri, Jun 21, 2019 at 08:05:21AM +0000, PICCA Frederic-Emmanuel wrote:
> Hello,
>
> I have a data type like this
>
> data SpaceGroup = P1 | P2 | P21 | C2 | P222 | P2221 | P21212 | P212121 | C222
> | C2221 | F222 | I222 | I212121 | P4 | P41 | P42 | P43 | P422 | P4212 | P4122
> | P41212 | P4222 | P42212 | P4322 | P43212 | I4 | I41 | I422 | I4122 | P3 |
> P31 | P32 | P312 | P321 | P3112 | P3121 | P3212 | P3221 | P6 | P61 | P62 |
> P63 | P64 | P65 | P622 | P6122 | P6522 | P6222 | P6422 | P6322 | R3 | R32 |
> P23 | P213 | P432 | P4232 | P4332 | P4132 | F23 | F432 | F4132 | I23 | I213 |
> I432 | I4132
> deriving (Show)
>
> has you can see it is quite long.
>
> I want to write a method in order to parser a string using the show method.
If you can use `read`
data SpaceGroup = P1 | P2 | P21 | C2 | P222
deriving (Show, Read)
p = read <$> takeText
and if you cannot
import Text.Parsec
import Text.Parsec.String
import Text.Parsec.Char
data SpaceGroup = P1 | P2 | P21 | C2 | P222
deriving (Enum, Show)
pa :: Parser SpaceGroup
pa = let ps = map (\s -> s <$ string (show s)) [P1 ..]
in choice ps
-- this need to be tweaked
Is this what you were looking for?
-F
------------------------------
Message: 4
Date: Fri, 21 Jun 2019 12:37:37 +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] Parser using the show method
Message-ID:
<a2a20ec3b8560d408356cac2fc148e53015bbbc...@sun-dag3.synchrotron-soleil.fr>
Content-Type: text/plain; charset="us-ascii"
Hello
> data SpaceGroup = P1 | P2 | P21 | C2 | P222
> deriving (Show, Read)
>
> p = read <$> takeText
this is excalty what I wanted. In my case I use readMaybe.
Do you know if a version existe of readMaybe with Text instead of String
------------------------------
Subject: Digest Footer
_______________________________________________
Beginners mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
------------------------------
End of Beginners Digest, Vol 132, Issue 5
*****************************************