<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 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 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 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 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 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 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 href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
                                            <a 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 href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a>
<a 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 href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
                          <a 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 href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
            <a 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 href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a 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>