<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">Thanks, <br>
      <br>
      Can I somehow also test if the string is valid so that the
      isvalid  function is used. <br>
      <br>
      Roelof<br>
      <br>
      Alex Hammel schreef op 23-2-2015 om 21:23:<br>
    </div>
    <blockquote
cite="mid:CA+_xFeofMmx-vZ0RuY7w0XJFu_STxzAnDeCendrh0HVaPMCs5A@mail.gmail.com"
      type="cite">
      <div dir="ltr">You can pattern match on string literals:<br>
        <br>
        parseMessage :: String -> String<br>
        parseMessage s = go (words s)<br>
            where<br>
                go ("I":_:_) = "Info"<br>
                go _         = "false"<br>
        <br>
        <br>
        You don't need to call it "go2", btw. Functions in where-blocks
        don't leak into the global scope, so there's no conflict with
        the `go` in your other function.<br>
        <br>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On Mon, Feb 23, 2015 at 12:15 PM,
          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>
                I cannot change that function. I have to use it, <br>
                <br>
                But I think I found a solution for a step earlier, <br>
                <br>
                To parse a line and change it to another line which will
                be a member of LogMessage : <br>
                <span class=""> <br>
                  -- | Main entry point to the application.<br>
                  {-# OPTIONS_GHC -Wall #-}<br>
                  <br>
                  module LogAnalysis where<br>
                  <br>
                  import Data.Char (isLetter, isDigit)<br>
                  <br>
                  isValid :: String -> Bool<br>
                  isValid s = go (words s)<br>
                      where<br>
                        go ([a]:b:_) = isLetter a && all isDigit
                  b<br>
                        go _         = False<br>
                  <br>
                </span> parseMessage :: String -> String<br>
                parseMessage s = go2 (words s) <br>
                    where <br>
                        go2 (a:_:_) =  case a of<br>
                                             "I" -> "Info "<br>
                                             _ -> "False"<br>
                                           <br>
                        go2 _         = "false"<span class=""><br>
                  <br>
                   <br>
                  -- | The main entry point.<br>
                  main :: IO ()<br>
                  main = do<br>
                </span>     putStrLn $ parseMessage "I 656 He trusts to
                you to set them free,"<br>
                <br>
                <br>
                <br>
                But I feels wierd, to use first a pattern matching and
                later do a case of.<br>
                Is this a good way or are there better ways, <br>
                <br>
                Roelfo<br>
                <br>
                <br>
                <br>
                Alex Hammel schreef op 23-2-2015 om 21:01:<br>
              </div>
              <div>
                <div class="h5">
                  <blockquote type="cite">
                    <div dir="ltr">Constructors with names like
                      'Unknown' are a code smell, IMO. I'd just define
                      the data type like this:<br>
                      <br>
                      data LogMessage = LogMessage MessageType TimeStamp
                      String<br>
                      <br>
                      and use `Either String LogMessage` in contexts
                      where parsing can fail:<br>
                      <br>
                      parseLogEntry :: String -> Either String
                      LogMesage<br>
                      parseLogEntry str<br>
                        | isValid str = Right $ mkLogMessage str<br>
                        | otherwise = Left $ "Poorly-formatted log
                      entry: " ++ str<br>
                      <br>
                      As for implementing mkLogMessage: you already know
                      how to unpack the parts of a log message with
                      `words` and pattern matching. After that it's just
                      a matter of type-casting everything correctly and
                      passing it to the `LogMessage` constructor.<br>
                    </div>
                    <div class="gmail_extra"><br>
                      <div class="gmail_quote">On Mon, Feb 23, 2015 at
                        10:14 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>Thanks, <br>
                              <br>
                              This works  : <br>
                              <span> <br>
                                -- | Main entry point to the
                                application.<br>
                                {-# OPTIONS_GHC -Wall #-}<br>
                                <br>
                                module LogAnalysis where<br>
                                <br>
                              </span><span> import Data.Char (isLetter,
                                isDigit)<br>
                                <br>
                                isValid :: String -> Bool<br>
                                isValid s = go (words s)<br>
                                    where<br>
                                      go ([a]:b:_) = isLetter a
                                && all isDigit b<br>
                                      go _         = False<br>
                                <br>
                                    <br>
                                -- | The main entry point.<br>
                                main :: IO ()<br>
                                main = do<br>
                              </span>     putStrLn $ ( show (isValid "I
                              656 He trusts to you to set them free,"))<br>
                              <br>
                              <br>
                              Now I have to ty to find out how I can
                              check if a has the contents of I/W/E and
                              how to make the right output 
                              (Error/Warning/Info  22)   " Text" ) <br>
                              and then make it work with this datatype :
                              <br>
                              <br>
                              data LogMessage = LogMessage MessageType
                              TimeStamp String<br>
                                              | Unknown String<br>
                                deriving (Show, Eq)<br>
                              <br>
                              Roelof<br>
                              <br>
                              Konstantine Rybnikov schreef op 23-2-2015
                              om 18:49:<br>
                            </div>
                            <div>
                              <div>
                                <blockquote type="cite">
                                  <div dir="ltr">
                                    <div>
                                      <div>
                                        <div>
                                          <div>As Alex mentioned,
                                            isValid returns Bool, while
                                            type for putStrLn is `String
                                            -> IO ()`. So, in order
                                            to print something of type
                                            Bool, you need to first
                                            convert it to String. For
                                            example, via a function
                                            `show`:<br>
                                            <br>
                                          </div>
                                          putStrLn (show True)<br>
                                          <br>
                                        </div>
                                        As Alex mentioned, there's a
                                        `print` function, which does
                                        exactly this:<br>
                                        <br>
                                      </div>
                                      print x = putStrLn (show x)<br>
                                      <br>
                                    </div>
                                    You can use it.<br>
                                  </div>
                                  <div class="gmail_extra"><br>
                                    <div class="gmail_quote">On Mon, Feb
                                      23, 2015 at 7:19 PM, 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>And when Im trying this:
                                            <br>
                                            <span> <br>
                                              {-# OPTIONS_GHC -Wall #-}<br>
                                              <br>
                                              module LogAnalysis where<br>
                                              <br>
                                              import Log;<br>
                                              import Data.Char
                                              (isLetter, isDigit)<br>
                                              <br>
                                            </span> isValid :: String
                                            -> Bool<span><br>
                                              isValid s = go (words s)<br>
                                                  where<br>
                                                    go ([a]:b:_) =
                                              isLetter a && all
                                              isDigit b<br>
                                                    go _         = False<br>
                                              <br>
                                                  <br>
                                            </span><span> -- | The main
                                              entry point.<br>
                                              main :: IO ()<br>
                                              main = do<br>
                                            </span>     putStrLn $
                                            isValid "I 4764 He trusts to
                                            you to set them free,"<span><br>
                                              <br>
                                              <br>
                                              I see this error message :
                                              <br>
                                              <br>
                                            </span>
                                            <div>src/LogAnalysis.hs@19:16-19:67
                                            </div>
                                            <div><span>Couldn't match
                                                type </span>
                                              <div
                                                style="font-size:14px"><span>Bool</span></div>
                                              <span> with </span>
                                              <div
                                                style="font-size:14px">[<span>Char</span>]</div>
                                              <span> Expected type:
                                                String Actual type: Bool</span><span
                                                title="Click to
                                                show/hide extra
                                                information"> …</span><span
                                                style="display:inline">
                                                In the second argument
                                                of ‘($)’, namely
                                                ‘isValid "I 4764 He
                                                trusts to you to set
                                                them free,"’ In a stmt
                                                of a 'do' block:
                                                putStrLn $ isValid "I
                                                4764 He trusts to you to
                                                set them free,"<br>
                                                <br>
                                                Roelof<br>
                                                <br>
                                              </span></div>
                                            <br>
                                            <br>
                                            <br>
                                            <br>
                                            Roelof Wobben schreef op
                                            23-2-2015 om 17:19:<br>
                                          </div>
                                          <div>
                                            <div>
                                              <blockquote type="cite">
                                                <div>I tried it another
                                                  way more like
                                                  explained on this page
                                                  :  <a
                                                    moz-do-not-send="true"
href="http://www.seas.upenn.edu/%7Ecis194/spring13/lectures/02-ADTs.html"
                                                    target="_blank">http://www.seas.upenn.edu/~cis194/spring13/lectures/02-ADTs.html</a><br>
                                                  <br>
                                                  so I tried this : <br>
                                                  <br>
                                                  parseMessage :: [Char]
                                                  -> [Char]<br>
                                                  parseMessage s<br>
                                                  case Errornumber of <br>
                                                      IsDigit
                                                  Errornumber  ->
                                                  "Geldige string"<br>
                                                     
                                                  otherwise           
                                                  -> "Ongeldige
                                                  string"<br>
                                                    where<br>
                                                        Error = s words<br>
                                                        Errornumber =
                                                  Error(ErrorNumber _ _
                                                  )<br>
                                                        Errorcode =
                                                  Error(_ Errorcode _ )<br>
                                                  <br>
                                                  but now I cannot use
                                                  where :( <br>
                                                  <br>
                                                  Roelof<br>
                                                  <br>
                                                  <br>
                                                  <br>
                                                  <br>
                                                  Roelof Wobben schreef
                                                  op 23-2-2015 om 16:10:<br>
                                                </div>
                                                <blockquote type="cite">
                                                  <div>Oke, <br>
                                                    <br>
                                                    Then I make there a
                                                    mistake,<br>
                                                    <br>
                                                    What I try to do is
                                                    to send the file to
                                                    parseMessage and let
                                                    IsValid check if
                                                    it´s have the right
                                                    format. <br>
                                                    <br>
                                                    Then after the where
                                                    I try to check if
                                                    the function isValid
                                                    returns true or
                                                    false. <br>
                                                    <br>
                                                    Roelof<br>
                                                    <br>
                                                    <br>
                                                    Konstantine Rybnikov
                                                    schreef op 23-2-2015
                                                    om 16:03:<br>
                                                  </div>
                                                  <blockquote
                                                    type="cite">
                                                    <div dir="ltr">
                                                      <div>
                                                        <div>
                                                          <div>Roelof,<br>
                                                          <br>
                                                          </div>
                                                          You defined
                                                          isValid
                                                          function in
                                                          the
                                                          upper-scope
                                                          first, and
                                                          then you
                                                          defined a
                                                          symbol
                                                          (variable)
                                                          that re-wrote
                                                          that name to
                                                          something
                                                          different
                                                          (string
                                                          "Geldige
                                                          string").
                                                          That's why you
                                                          get an error
                                                          saying it
                                                          doesn't expect
                                                          arguments.<br>
                                                          <br>
                                                        </div>
                                                        My suggestion is
                                                        to rename second
                                                        isValid.<br>
                                                        <br>
                                                      </div>
                                                      Good luck.<br>
                                                    </div>
                                                    <div
                                                      class="gmail_extra"><br>
                                                      <div
                                                        class="gmail_quote">On
                                                        Mon, Feb 23,
                                                        2015 at 4:50 PM,
                                                        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>Chaddaï
                                                          Fouché schreef
                                                          op 23-2-2015
                                                          om 13:20:<br>
                                                          </div>
                                                          <span>
                                                          <blockquote
                                                          type="cite">
                                                          <div dir="ltr">
                                                          <div>Note that
                                                          Roelof is
                                                          doing the CIS
                                                          194 Homework <a
moz-do-not-send="true"
                                                          href="http://www.seas.upenn.edu/%7Ecis194/fall14/hw/03-ADTs.pdf"
target="_blank">http://www.seas.upenn.edu/~cis194/fall14/hw/03-ADTs.pdf</a>
                                                          (the older
                                                          version of
                                                          fall2014, not
                                                          the one
                                                          currently
                                                          running). This
                                                          is much
                                                          clearer than
                                                          Roelof's
                                                          description,
                                                          and gives
                                                          among other
                                                          information an
                                                          algebraic
                                                          datatype to
                                                          represent log
                                                          messages.<br>
                                                          <br>
                                                          <br>
                                                          -- <br>
                                                          </div>
                                                          Jedaï<br>
                                                          </div>
                                                          </blockquote>
                                                          <br>
                                                          </span>
                                                          Correct and Im
                                                          trying to do
                                                          exercise 1 of
                                                          Week 2,<br>
                                                          <br>
                                                          I have tried
                                                          this solution
                                                          : <br>
                                                          <br>
                                                          -- | Main
                                                          entry point to
                                                          the
                                                          application.<br>
                                                          {-#
                                                          OPTIONS_GHC
                                                          -Wall #-}<br>
                                                          <br>
                                                          module
                                                          LogAnalysis
                                                          where<br>
                                                          <br>
                                                          import Log;<br>
                                                          import
                                                          Data.Char
                                                          (isLetter,
                                                          isDigit) <br>
                                                          <br>
                                                          isValid ::
                                                          [Char] ->
                                                          Bool <br>
                                                          isValid s = go
                                                          (words s)<br>
                                                              where<br>
                                                                go
                                                          ([a]:b:_) =
                                                          isLetter a
                                                          && all
                                                          isDigit b<br>
                                                                go
                                                          _         =
                                                          False <br>
                                                          <br>
                                                          parseMessage
                                                          :: [Char]
                                                          -> [Char]<br>
                                                          parseMessage s
                                                          = isValid s <br>
                                                              where <br>
                                                                 
                                                          isValid =
                                                          "Geldige
                                                          string"<br>
                                                                 
                                                          _       =
                                                          "Ongeldige
                                                          string"<br>
                                                          <br>
                                                          -- | The main
                                                          entry point.<br>
                                                          main :: IO ()<br>
                                                          main = do<br>
                                                              putStrLn $
                                                          parseMessage
                                                          "I 4764 He
                                                          trusts to you
                                                          to set them
                                                          free," <br>
                                                          <br>
                                                          <br>
                                                          but I see this
                                                          error message
                                                          : <br>
                                                          <br>
                                                          <div>src/LogAnalysis.hs@16:18-16:27

                                                          </div>
                                                          <div><span>Couldn't
                                                          match expected
                                                          type ‘[Char]
                                                          -> [Char]’
                                                          with actual
                                                          type </span>
                                                          <div
                                                          style="font-size:14px">[<span>Char</span>]</div>
                                                          <span> The
                                                          function </span>
                                                          <div
                                                          style="font-size:14px"><span>isValid</span></div>
                                                          <span> is
                                                          applied to one
                                                          argument, but
                                                          its type </span>
                                                          <div
                                                          style="font-size:14px">[<span>Char</span>]</div>
                                                          <span> has
                                                          none</span><span
                                                          title="Click
                                                          to show/hide
                                                          extra
                                                          information">
                                                          …</span><span
style="display:inline"> In the expression: isValid s In an equation for
                                                          ‘parseMessage’:

                                                          parseMessage s
                                                          = isValid s
                                                          where isValid
                                                          = "Geldige
                                                          string" _ =
                                                          "Ongeldige
                                                          string"<br>
                                                          <br>
                                                          <br>
                                                          </span></div>
                                                          <br>
                                                          </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>
                                                    </div>
                                                  </blockquote>
                                                  <br>
                                                </blockquote>
                                                <br>
                                                <br>
                                                <fieldset></fieldset>
                                                <br>
                                                <pre>_______________________________________________
Haskell-Cafe mailing list
<a moz-do-not-send="true" href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a>
<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>
</pre>
                                              </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>
                                  </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>
                    </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>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
Haskell-Cafe mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a>
<a class="moz-txt-link-freetext" href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>