40 lines
915 B
Haskell
40 lines
915 B
Haskell
module Homework.Ch02.Log where
|
|
|
|
data MessageType
|
|
= Info
|
|
| Warning
|
|
| Error Int
|
|
deriving (Show, Eq)
|
|
|
|
type TimeStamp = Int
|
|
|
|
data LogMessage
|
|
= LogMessage MessageType TimeStamp String
|
|
| Unknown String
|
|
deriving (Show, Eq)
|
|
|
|
data MessageTree
|
|
= Leaf
|
|
| Node MessageTree LogMessage MessageTree
|
|
deriving (Show, Eq)
|
|
|
|
-- | @testParse p n f@ tests the log file parser @p@ by running it
|
|
-- on the first @n@ lines of file @f@.
|
|
testParse ::
|
|
(String -> [LogMessage]) ->
|
|
Int ->
|
|
FilePath ->
|
|
IO [LogMessage]
|
|
testParse parse n file = take n . parse <$> readFile file
|
|
|
|
-- | @testWhatWentWrong p w f@ tests the log file parser @p@ and
|
|
-- warning message extractor @w@ by running them on the log file
|
|
-- @f@.
|
|
testWhatWentWrong ::
|
|
(String -> [LogMessage]) ->
|
|
([LogMessage] -> [String]) ->
|
|
FilePath ->
|
|
IO [String]
|
|
testWhatWentWrong parse whatWentWrong file =
|
|
whatWentWrong . parse <$> readFile file
|