Send Beginners mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
http://www.haskell.org/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: Parsec, parsing 'free text' (Franco)
2. Type Tree variables (bahad?r altan)
3. Re: Type Tree variables (Ozgur Akgun)
4. Re: Type Tree variables (Ozgur Akgun)
5. Re: Type Tree variables (Ozgur Akgun)
6. Fw: Type Tree variables (bahad?r altan)
----------------------------------------------------------------------
Message: 1
Date: Sun, 11 Mar 2012 12:45:26 +0100
From: Franco <[email protected]>
Subject: Re: [Haskell-beginners] Parsec, parsing 'free text'
To: Stephen Tetley <[email protected]>
Cc: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=US-ASCII
Indeed the second solution is more elegant (and the examples very simple to
follow, they should be added to Parsec's documentation!).
For the records, before reading this I was using the ductape solution below:
161
162 -- take a string till t, on that runs parser p.
163 -- The last parameters sets wheter t will be consumed or
164 -- not. FILE HANDLING FOR ERRORS?
165 parseTill :: Parser a -> Parser b -> Parser b
166 parseTill ter p = manyTill anyChar ter >>= \sndPar ->
167 case parse p "" sndPar of
168 Left a -> fail "todo: check how error msg are
propagted"
169 Right b -> return b
Thanks again
-F
On Sun, 11 Mar 2012 10:53:50 +0000
Stephen Tetley <[email protected]> wrote:
> Hi Franco
>
> Actually the simple case of finding formatting tags in free text was
> easier in Parsec than my email last night suggested. Perhaps it is
> artificially easy because you can identify tag start and ends with a
> single character so you can use `satisfy`.
>
> import Text.Parsec
> import Text.Parsec.String
> import Control.Applicative hiding ( (<|>), many )
>
>
> data Text1 = FreeText String | Formatted String
> deriving (Eq,Ord,Show)
>
> type Text = [Text1]
>
> runText :: String -> Either ParseError Text
> runText = runP lexer () "no-input"
>
>
> notLAngle :: Char -> Bool
> notLAngle = (/= '<')
>
> notRAngle :: Char -> Bool
> notRAngle = (/= '>')
>
> lexer :: Parser Text
> lexer = many (formatted <|> free)
>
> formatted :: Parser Text1
> formatted = Formatted <$>
> between (char '<') (char '>') (many1 (satisfy notRAngle))
>
> free :: Parser Text1
> free = FreeText <$> many1 (satisfy notLAngle)
>
>
>
> demo01 = runText "[ someconditions | this is some <red - formatted> text.]"
> demo02 = runText "<red - formatted> more text."
--
Franco <[email protected]>
------------------------------
Message: 2
Date: Sun, 11 Mar 2012 13:36:32 +0000 (GMT)
From: bahad?r altan <[email protected]>
Subject: [Haskell-beginners] Type Tree variables
To: "[email protected]" <[email protected]>
Message-ID:
<[email protected]>
Content-Type: text/plain; charset="iso-8859-1"
Hello everyone, I'm trying to write a generic function which works on binary
trees. For example my function works on just first three nodes of ?a binary
tree, but the tree is bigger, I don't care the other nodes. Like this :
function Node a (Node b Subtree Subtree)??(Node c Subtree Subtree)??
The problem is I couldn't find a way to represent "Subtree" structures. A guy
here told me to use variables of ?type Tree, but I don't know how to create
them. Can you tell me how to solve this problem??
Thanks a lot.
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20120311/394cb429/attachment-0001.htm>
------------------------------
Message: 3
Date: Sun, 11 Mar 2012 14:05:38 +0000
From: Ozgur Akgun <[email protected]>
Subject: Re: [Haskell-beginners] Type Tree variables
To: bahad?r altan <[email protected]>
Cc: "[email protected]" <[email protected]>
Message-ID:
<calzazpcybzejiqbc4b8cy7af8ugocu0rm-+mmjnqvonxvvo...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
Hi,
On 11 March 2012 13:36, bahad?r altan <[email protected]> wrote:
> ... my function works on just first three nodes of a binary tree, but
> the tree is bigger, I don't care the other nodes. Like this :
>
> function Node a (Node b Subtree Subtree) (Node c Subtree Subtree)
>
Assuming you use the following declaration for your data type:
data Tree a = Leaf | Node a (Tree a) (Tree a)
The syntax you are looking for is the following; where x, y and z are
pattern variables.
f :: Tree a -> (a,a,a)
f (Node x (Node y _ _) (Node z _ _)) = (x,y,z)
The above function is obviously partial. It would throw an exception if you
apply it to anything which doesn't have the 'proper' shape. (e.g. "f Leaf")
I don't know your background, but I'd suggest reading some introductory
material if you are having trouble understanding the above snippets. LYAH
is a pretty fun read: http://learnyouahaskell.com
Hope this helps,
Ozgur
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20120311/00068ae4/attachment-0001.htm>
------------------------------
Message: 4
Date: Sun, 11 Mar 2012 14:23:58 +0000
From: Ozgur Akgun <[email protected]>
Subject: Re: [Haskell-beginners] Type Tree variables
To: bahad?r altan <[email protected]>, Haskell Beginners
<[email protected]>
Message-ID:
<calzazpao_w0kobnteuan5u9hc6am_sh85mht2zg05986shq...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
(Replying to the list again)
On 11 March 2012 14:15, bahad?r altan <[email protected]> wrote:
> Hi,
> Thanks for your reply. I tried your solution but my function becomes
> like this and it gives an error on the right side :
>
function (Node a (Node b _ _) (Node c _ _)) = (Node c (Node a _ _) (Node b
> _ _))
>
This is not what you originally said though. If you need to refer to the
subtrees, you just need to name them. (Instead of using _)
[ not a very useful function, but still: ]
f :: Tree a -> Tree a
f (Node x (Node y y1 y2) (Node z z1 z2)) = Node x (Node y y1 y2) (Node z z1
z2)
-- also think about the types: (x, y, z :: a) (y1, y2, z1, z2 :: Tree a)
> The thing is I don't need to process the subtrees but I still have to
> return them as an output. I still can't do that. And I read a few chapters
> in LYAH, it was pretty good, I learned haskell from there. However, I think
> the answer of this question isn't in LYAH.
> Thanks..
> Bahadir
>
--
Ozgur Akgun
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20120311/3816a569/attachment-0001.htm>
------------------------------
Message: 5
Date: Sun, 11 Mar 2012 14:47:59 +0000
From: Ozgur Akgun <[email protected]>
Subject: Re: [Haskell-beginners] Type Tree variables
To: bahad?r altan <[email protected]>, Haskell Beginners
<[email protected]>
Message-ID:
<CALzazPBf+a=UMr=marneu8uwlldxxmcon0r+x5crytup4zy...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
Hi,
Please reply to the list so others can contribute.
On 11 March 2012 14:42, bahad?r altan <[email protected]> wrote:
> I'm sorry if I mislead you, I think I didn't mention my problem clearly
> there. I'm actually stuck in the position of declaring subtrees, I couldn't
> find a solution to that.
>
> My function is like
>
> f :: Tree -> Tree
>
> And my tree structure is like
>
> data Tree = Empty | Branch Integer Tree Tree
>
> And When I write this which I learned from you :
> (c1, c2, d1, d2, e1, e2 :: Tree)
>
> I get error. If you tell me How should I solve that I'd appreciate.
>
Hence I was suggesting to think about the types of the pattern variables.
f (Branch x (Branch y y1 y2) (Branch z z1 z2)) = (x,y,y1,y2,z,z1,z2)
This definition will work, and return a 7-tuple given a Tree. Try to load
this into ghci and see what the type of f is (:t f).
One hint: y and y1 aren't of the same type.
Ozgur
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20120311/73dfbcad/attachment-0001.htm>
------------------------------
Message: 6
Date: Sun, 11 Mar 2012 14:53:03 +0000 (GMT)
From: bahad?r altan <[email protected]>
Subject: [Haskell-beginners] Fw: Type Tree variables
To: "[email protected]" <[email protected]>
Message-ID:
<[email protected]>
Content-Type: text/plain; charset="iso-8859-1"
----- Forwarded Message -----
From: bahad?r altan <[email protected]>
To: Ozgur Akgun <[email protected]>
Sent: Sunday, 11 March 2012, 16:42
Subject: Re: [Haskell-beginners] Type Tree variables
I'm sorry if I mislead you, I think I didn't mention my problem clearly there.
I'm actually stuck in the position of declaring subtrees, I couldn't find a
solution to that.
My function is like
f :: Tree -> Tree
And my tree structure is like?
data Tree = Empty | Branch Integer Tree Tree?
And When I write this which I learned from you :?
(c1, c2, d1, d2, e1, e2 :: Tree)
I get error. If you tell me How should I solve that I'd appreciate.
Thanks,
Bahadir
________________________________
From: Ozgur Akgun <[email protected]>
To: bahad?r altan <[email protected]>; Haskell Beginners
<[email protected]>
Sent: Sunday, 11 March 2012, 16:23
Subject: Re: [Haskell-beginners] Type Tree variables
(Replying to the list again)
On 11 March 2012 14:15, bahad?r altan <[email protected]> wrote:
Hi,?
>Thanks for your reply. I tried your solution but my function becomes ?like
>this and it gives an error on the right side :??
function (Node a (Node b _ _) (Node c _ _))? =?(Node c (Node a _ _) (Node b _
_))?
This is not what you originally said though. If you need to refer to the
subtrees, you just need to name them. (Instead of using _)
[ not a very useful function, but still: ]
f :: Tree a -> Tree a
f (Node x (Node y y1 y2) (Node z z1 z2)) =?Node x (Node y y1 y2) (Node z z1 z2)
-- also think about the types: (x, y, z :: a) (y1, y2, z1, z2 :: Tree a)
?
The thing is I don't need to process the subtrees but I still have to return
them as an output. I still can't do that. And I read a few chapters in LYAH, it
was pretty good, I learned haskell from there. However, I think the answer of
this question isn't in LYAH.?
>Thanks..
>Bahadir
--
Ozgur Akgun
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20120311/b073ab81/attachment.htm>
------------------------------
_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners
End of Beginners Digest, Vol 45, Issue 14
*****************************************