From 8ee84f2253a9311fb365d994012aa6de06ef6b92 Mon Sep 17 00:00:00 2001 From: Edoardo La Greca Date: Mon, 30 Jun 2025 20:13:59 +0200 Subject: add first exercise of lecture 2 --- lec02/LogAnalysis.hs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 lec02/LogAnalysis.hs (limited to 'lec02/LogAnalysis.hs') diff --git a/lec02/LogAnalysis.hs b/lec02/LogAnalysis.hs new file mode 100644 index 0000000..fc4d3df --- /dev/null +++ b/lec02/LogAnalysis.hs @@ -0,0 +1,35 @@ +{-# OPTIONS_GHC -Wall #-} +module LogAnalysis where + +import Log + +-- Exercise 1 + +nthWord :: Int -> String -> String +nthWord n = (!! n) . words + +firstWord :: String -> String +firstWord = nthWord 0 + +nthWordInt :: Int -> String -> Int +nthWordInt n = read . nthWord n + +timeStamp :: String -> Int +timeStamp s + | firstWord s == "E" = nthWordInt 2 s + | otherwise = nthWordInt 1 s + +restOfMessage :: String -> String +restOfMessage s + | firstWord s == "E" = (unwords . drop 3 . words) s + | otherwise = (unwords . drop 2 . words) s + +parseMessage :: String -> LogMessage +parseMessage s + | firstWord s == "I" = LogMessage Info (timeStamp s) (restOfMessage s) + | firstWord s == "W" = LogMessage Warning (timeStamp s) (restOfMessage s) + | firstWord s == "E" = LogMessage (Error (nthWordInt 1 s)) (timeStamp s) (restOfMessage s) + | otherwise = Unknown s + +parse :: String -> [LogMessage] +parse = map parseMessage . lines -- cgit v1.2.3