Created
July 18, 2022 02:27
-
-
Save MarcusXavierr/230bc0a7d56cebcc5d7181e7f7afb235 to your computer and use it in GitHub Desktop.
CIS 194 week 2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{-# OPTIONS_GHC -Wall #-} | |
module Main where | |
import Log | |
parse :: String -> [LogMessage] | |
parse xs = map parseMessage $ lines xs | |
parseMessage :: String -> LogMessage | |
parseMessage = createLog . words | |
createLog :: [String] -> LogMessage | |
createLog [] = error "Empty list error" | |
createLog xs = case head xs of | |
"E" -> LogMessage (Error (read (xs !! 1))) (read ( xs !! 2 )) ( (unwords . drop 3) xs ) | |
"I" -> LogMessage Info (read ( xs !! 1 )) ( (unwords . drop 2) xs ) | |
"W" -> LogMessage Warning (read ( xs !! 1 )) ( (unwords . drop 2) xs ) | |
_ -> Unknown (unwords xs ) | |
insert :: LogMessage -> MessageTree -> MessageTree | |
insert logM Leaf = Node Leaf logM Leaf | |
insert logM (Node l m r) | |
|getTimestamp logM > getTimestamp m = Node l m ( insert logM r ) | |
|getTimestamp logM < getTimestamp m = Node ( insert logM l ) m r | |
|otherwise = Node l m r | |
getTimestamp :: LogMessage -> TimeStamp | |
getTimestamp (Unknown _) = error "Unknown logmessage dont have timestamp" | |
getTimestamp (LogMessage _ x _) = x | |
build :: [LogMessage] -> MessageTree | |
build = foldr insert Leaf | |
inOrder :: MessageTree -> [LogMessage] | |
inOrder Leaf = [] | |
inOrder (Node l m r) = inOrder l ++ [m] ++ inOrder r | |
whatWentWrong :: [LogMessage] -> [String] | |
whatWentWrong [] = [] | |
whatWentWrong (x:xs) | |
|isError x && getErrorIntensity x > 50 = getMessageFromLog x : whatWentWrong xs | |
|otherwise = whatWentWrong xs | |
isError :: LogMessage -> Bool | |
isError (LogMessage (Error _) _ _) = True | |
isError _ = False | |
getMessageFromLog :: LogMessage -> String | |
getMessageFromLog (Unknown _) = error "Unknown dont have message" | |
getMessageFromLog (LogMessage _ _ m) = m | |
getErrorIntensity :: LogMessage -> Int | |
getErrorIntensity (LogMessage (Error x) _ _) = x | |
getErrorIntensity _ = error "this function only works with Error type" | |
sortLog :: [LogMessage] -> [LogMessage] | |
sortLog = inOrder . build | |
main :: IO () | |
main = do | |
putStrLn "hello world" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment