<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">According to the manual this schould
work : <br>
<br>
-- | Parse the String to make the right logmessage <br>
parse_line :: String -> LogMessage<br>
parse_line s = <br>
case words s of <br>
("I":time:text) -> LogMessage Info (read
time) (unwords text)<br>
("W":time:text) -> LogMessage Warning (read
time) (unwords text)<br>
("E":errorcode:time:text) -> LogMessage (Error (read
errorcode)) (read time) (unwords text)<br>
_ -> Unknown "This is not in
the right format"<br>
<br>
<br>
-- | here the actual function which uses isValid and parse to make
the right log messages<br>
parseMessage :: String -> LogMessage <br>
parseMessage s = <br>
if isValid(s) then parse_line(s) else Unknown "This is not
the right format"<br>
<br>
<br>
parse :: String -> [LogMessage]<br>
parse = (map parseMessage) . lines<br>
<br>
insert :: LogMessage -> MessageTree -> MessageTree<br>
insert s =<br>
message_text(_:text) = text ; <br>
case (_:text) of <br>
"This is not the right format" -> Leaf <br>
_ -> Node LogMessage Leaf <br>
<br>
<br>
but why do I set this message then : <br>
<div class="ide-error-span">src/LogAnalysis.hs@37:25-37:26 </div>
<div class="ide-error-msg"><span>parse error on input </span>
<div class="CodeMirror cm-s-default" style="font-size: 14px;"><span
class="cm-keyword"><br>
<br>
that is this line : message_text(_:text) = text <br>
<br>
Roelof<br>
<br>
</span></div>
</div>
<br>
<br>
Roelof Wobben schreef op 1-3-2015 om 11:17:<br>
</div>
<blockquote cite="mid:54F2E745.7050505@home.nl" type="cite">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<div class="moz-cite-prefix">Thanks, <br>
<br>
Found it. <br>
<br>
Now I have to find out how I can test if the LogMessage has the
text "this is not the right format" in it. <br>
<br>
Roelof<br>
<br>
<br>
<br>
Sumit Sahrawat, Maths & Computing, IIT (BHU) schreef op
28-2-2015 om 19:49:<br>
</div>
<blockquote
cite="mid:CAJbEW8NvZttQTemjyJ2xDnVPWyHusYwuev_9u958gNUhRcsN6A@mail.gmail.com"
type="cite">
<div dir="ltr">Don't worry. Keep these points in mind and
re-read my previous mail.
<div><br>
</div>
<div>Regarding data vs. type constructors.</div>
<div><br>
</div>
<div>1) Leaf :: MessageTree (Leaf is a MessageTree)</div>
<div>2) MessageTree is a type constructor (takes types and
gives new types)</div>
<div>3) Node is a data constructor (takes values and gives a
new MessageTree)</div>
<div><br>
</div>
<div>Regarding insertion.</div>
<div><br>
</div>
<div>1) The "insert" function takes a message and tree, and
returns a tree with that message inserted into it</div>
<div>2) We absolutely have to provide it a tree</div>
<div>3) If we insert an invalid message in the tree, it does
not get added. Then we get ..... the same tree back.</div>
<div><br>
</div>
<div>If you still cannot see a problem in your code, ask
yourself the following:</div>
<div><br>
</div>
1) What type does the output of insert (MessageTree Leaf)
have, and what type should it have<br>
2) What happens if we insert an invalid string in a non-empty
tree (according to your code)
<div><br>
<div>Don't forget to re-read the previous mail.</div>
<div>Hope this drives the point home.</div>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On 28 February 2015 at 22:59, Roelof
Wobben <span dir="ltr"><<a moz-do-not-send="true"
href="mailto:r.wobben@home.nl" target="_blank">r.wobben@home.nl</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<div>Sorry, <br>
<br>
But I do not understand what you mean. <br>
<br>
What I try to do is this <br>
<br>
If you have a LogMessage which contains " This is not
the right format " then the LogMessage is not inserted
in the tree. <br>
Every other message are inserted in the tree.<br>
<br>
So that is why I make a MessageTree with only one
Leaf. <br>
<br>
Roelof<br>
<br>
<br>
<br>
Sumit Sahrawat, Maths & Computing, IIT (BHU)
schreef op 28-2-2015 om 16:08:<br>
</div>
<div>
<div class="h5">
<blockquote type="cite">
<div dir="ltr">You're missing an argument to
insert, assuming that it is indeed there,
consider this:
<div><br>
</div>
<div><font face="monospace, monospace">
insert msg tree = tree'</font></div>
<div><span
style="font-family:monospace,monospace">
where tree' = undefined</span></div>
<div><font face="monospace, monospace"> --
Take a LogMessage (msg) and a MessageTree
(tree)</font></div>
<div><font face="monospace, monospace"> --
and return a new MessageTree (tree')</font></div>
<div><font face="monospace, monospace"><br>
</font></div>
Therefore, the result of insert in your case,
i.e. "MessageTree Leaf" should be of type
MessageTree.<br>
And thus, we get
<div><font face="monospace, monospace"><br>
</font></div>
<div><font face="monospace, monospace">
MessageTree Leaf :: MessageTree</font></div>
<div><font face="monospace, monospace"> --
Takes a (Leaf :: LogMessage) and produces a
MessageTree</font></div>
<div><font face="monospace, monospace"><br>
</font></div>
which implies,
<div><font face="monospace, monospace"><br>
</font></div>
<div><font face="monospace, monospace">
MessageTree :: LogMessage -> MessageTree</font></div>
<div><font face="monospace, monospace"> -- A
Data constructor</font></div>
<div><font face="monospace, monospace"><br>
</font></div>
Obviously no such data constructor exists. A
data constructor of this type would exist only
if you wrote something like:
<div><br>
</div>
<div><font face="monospace, monospace"> data
MessageTree = MessageTree LogMessage</font></div>
<div><span
style="font-family:monospace,monospace">
| ...</span></div>
<div><span
style="font-family:monospace,monospace"><br>
</span></div>
which would not make sense.</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On 28 February 2015 at
19:09, Roelof Wobben <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:r.wobben@home.nl"
target="_blank">r.wobben@home.nl</a>></span>
wrote:<br>
<blockquote class="gmail_quote"
style="margin:0 0 0 .8ex;border-left:1px
#ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<div>I tried this : <br>
<span> <br>
insert :: LogMessage -> MessageTree
-> MessageTree<br>
</span> insert s = <br>
case words s of <br>
(_:_: "This is not the right
format") -> MessageTree Leaf <br>
_
-> MessageTree Node LogMessage Leaf <br>
<br>
<br>
But I see this errormessages which I do
not understand : <br>
<br>
<br>
<div>
<div>src/LogAnalysis.hs@38:49-38:60 </div>
<div><span>Not in scope: data
constructor </span>
<div style="font-size:14px"><span>MessageTree</span></div>
</div>
</div>
<div>
<div>src/LogAnalysis.hs@39:49-39:60 </div>
<div><span>Not in scope: data
constructor </span>
<div style="font-size:14px"><span>MessageTree<br>
<br>
</span></div>
</div>
</div>
<br>
<br>
Mike Meyer schreef op 28-2-2015 om
12:17:<br>
</div>
<div>
<div>
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">On Sat,
Feb 28, 2015 at 5:07 AM,
Roelof Wobben <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:r.wobben@home.nl"
target="_blank">r.wobben@home.nl</a>></span>
wrote:<br>
<blockquote
class="gmail_quote"
style="margin:0 0 0
.8ex;border-left:1px #ccc
solid;padding-left:1ex">
<div bgcolor="#FFFFFF"
text="#000000">
<div><br>
That part I understand .<br>
<br>
it's more how I do it
here :<br>
<br>
Lets say I have this : <br>
<br>
data MessageType = Info<br>
|
Warning<br>
| Error
Int<br>
deriving (Show, Eq)<br>
<br>
type TimeStamp = Int<br>
<br>
data LogMessage =
LogMessage MessageType
TimeStamp String<br>
|
Unknown String<br>
deriving (Show, Eq)<br>
<br>
data MessageTree = Leaf<br>
| Node
MessageTree LogMessage
MessageTree<br>
deriving (Show, Eq)<br>
<br>
Now I have to put all
the LogMessages in a
binary tree.<br>
with this signature :
insert :: LogMessage
-> MessageTree ->
MessageTree<br>
<br>
I think I need recursion
here but I still not see
how I can make the
clauses. <br>
Normally you can say
somethig like this []
-> 0 or 1 ->
but here it seems to be
all seperate
logMessages <br>
</div>
</div>
</blockquote>
<div><br>
</div>
<div>Whether you need
recursion or not depends on
where you're to insert the
message. For instance, you
could turn them into a list
with:</div>
<div><br>
</div>
<div>insert message tree =
Node tree message Leaf</div>
<div><br>
</div>
<div>Try drawing a few
pictures of what that
produces, and you'll see why
it's probably not what you
want.</div>
<div><br>
</div>
<div>You should be able to
tell by looking at the
MessageTree type that you
have two cases: one where
you're passed something
matching a Node, and one
where you're passed
something that's just a
Leaf. The latter can't be
recursive, so it's going to
terminate any recursion.
Following the advice given
to you for the Hanoi
problem, try writing it
first.</div>
<div><br>
</div>
<div>Then all you have to do
is figure out how to handle
the case where you're given
a Node instead of a Leaf.
Figuring out where in the
MessageTree you want to
insert the Logmessage will
probably be required to do
that.<br>
</div>
</div>
</div>
</div>
</blockquote>
<br>
</div>
</div>
</div>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a moz-do-not-send="true"
href="mailto:Haskell-Cafe@haskell.org"
target="_blank">Haskell-Cafe@haskell.org</a><br>
<a moz-do-not-send="true"
href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe"
target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
<br>
</blockquote>
</div>
<br>
<br clear="all">
<div><br>
</div>
-- <br>
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div dir="ltr">
<div>Regards</div>
<div dir="ltr">
<div><br>
</div>
<div>Sumit Sahrawat</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<br>
</div>
</div>
</div>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a moz-do-not-send="true"
href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a moz-do-not-send="true"
href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe"
target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
<br>
</blockquote>
</div>
<br>
<br clear="all">
<div><br>
</div>
-- <br>
<div class="gmail_signature">
<div dir="ltr">
<div>
<div dir="ltr">
<div dir="ltr">
<div>Regards</div>
<div dir="ltr">
<div><br>
</div>
<div>Sumit Sahrawat</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<br>
</blockquote>
<br>
</body>
</html>