Skip to content

Instantly share code, notes, and snippets.

@yasar11732
Last active December 10, 2019 09:01
Show Gist options
  • Select an option

  • Save yasar11732/fc4c2692dcd6d356658b807182af34c6 to your computer and use it in GitHub Desktop.

Select an option

Save yasar11732/fc4c2692dcd6d356658b807182af34c6 to your computer and use it in GitHub Desktop.
{-# OPTIONS_GHC -Wall #-}
module LogAnalysis where
import Log
parseMessage' :: [String] -> LogMessage
parseMessage' ("E":severity:timestamp:rest) = LogMessage (Error (read severity)) (read timestamp) (unwords rest)
parseMessage' ("I":timestamp:rest) = LogMessage Info (read timestamp) (unwords rest)
parseMessage' ("W":timestamp:rest) = LogMessage Warning (read timestamp) (unwords rest)
parseMessage' x = Unknown (unwords x)
parseMessage :: String -> LogMessage
parseMessage line = parseMessage' (words line)
parse :: String -> [LogMessage]
parse t = map parseMessage $ lines t
insert :: LogMessage -> MessageTree -> MessageTree
insert (Unknown _) t = t
insert lm Leaf = Node Leaf lm Leaf
insert _ v@(Node _ (Unknown _) _) = v
insert lm@(LogMessage _ ts _) (Node left origval@(LogMessage _ tsval _) right)
| ts <= tsval = Node (insert lm left) origval right
| otherwise = Node left origval (insert lm right)
build :: [LogMessage] -> MessageTree
build [] = Leaf
build (x:xs) = insert x (build xs)
inOrder :: MessageTree -> [LogMessage]
inOrder Leaf = []
inOrder (Node left m right) = (inOrder left) ++ [m] ++ (inOrder right)
isSevere :: LogMessage -> Bool
isSevere (LogMessage (Error severity) _ _) = severity > 50
isSevere _ = False
extractLogMessage :: LogMessage->String
extractLogMessage (LogMessage _ _ s) = s
extractLogMessage (Unknown s) = s
sortLogMessages :: [LogMessage] -> [LogMessage]
sortLogMessages = inOrder . build
whatWentWrong :: [LogMessage] -> [String]
whatWentWrong = extractLogMessage <$> filter isSevere . sortLogMessages
@yasar11732

Copy link
Copy Markdown
Author

LogAnalysis.hs:43:17: error:
    * Couldn't match type `[Char]' with `[LogMessage] -> [String]'
      Expected type: (MessageTree -> [LogMessage])
                     -> [LogMessage] -> [String]
        Actual type: [LogMessage] -> String
    * The first argument of ($) takes one argument,
      its type is `f0 b0',
      it is specialized to `[LogMessage] -> String'
      In the expression: extractLogMessage <$> filter isSevere $ inOrder
      In an equation for `whatWentWrong':
          whatWentWrong = extractLogMessage <$> filter isSevere $ inOrder
   |
43 | whatWentWrong = extractLogMessage <$> filter isSevere $ inOrder 
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

LogAnalysis.hs:43:39: error:
    * Couldn't match type `[LogMessage]' with `LogMessage'
      Expected type: [LogMessage] -> LogMessage
        Actual type: [LogMessage] -> [LogMessage]
    * In the second argument of `(<$>)', namely `filter isSevere'
      In the expression: extractLogMessage <$> filter isSevere
      In the expression: extractLogMessage <$> filter isSevere $ inOrder
   |
43 | whatWentWrong = extractLogMessage <$> filter isSevere $ inOrder 
   |                                       ^^^^^^^^^^^^^^^

@yasar11732

Copy link
Copy Markdown
Author

LogAnalysis.hs:46:17: error:
    * Couldn't match type `Char' with `[Char]'
      Expected type: [LogMessage] -> [String]
        Actual type: [LogMessage] -> String
    * In the expression:
        extractLogMessage <$> filter isSevere . sortLogMessages
      In an equation for `whatWentWrong':
          whatWentWrong
            = extractLogMessage <$> filter isSevere . sortLogMessages
   |
46 | whatWentWrong = extractLogMessage <$> filter isSevere . sortLogMessages
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

LogAnalysis.hs:46:39: error:
    * Couldn't match type `[LogMessage]' with `LogMessage'
      Expected type: [LogMessage] -> LogMessage
        Actual type: [LogMessage] -> [LogMessage]
    * In the second argument of `(<$>)', namely
        `filter isSevere . sortLogMessages'
      In the expression:
        extractLogMessage <$> filter isSevere . sortLogMessages
      In an equation for `whatWentWrong':
          whatWentWrong
            = extractLogMessage <$> filter isSevere . sortLogMessages
   |
46 | whatWentWrong = extractLogMessage <$> filter isSevere . sortLogMessages
   |                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment