JamieB
JamieB

Reputation: 923

Haskell - Format list output

testDatabase :: [Film]
testDatabase = [("Director 1","Film 1",2012,[]),("Director 2","Film 2",2,[])]

filmsByDirector :: String -> [Film]
filmsByDirector name = filter (\(a,_,_,_) -> a == name) testDatabase

I am calling this from another function and I am trying to format the list so I can see an output like:

Director: Director 1
Film Name: Film 1
Year: 2012
Ratings:

Any help?

Upvotes: 0

Views: 451

Answers (1)

cmh
cmh

Reputation: 10927

You want a function that takes a string and converts it into a formatted string. The implementation is a straight formatting.

formatString :: Film -> String

You then just need to apply this function to every Film you are interested in (via a map) and join (concat) that final string to get the result.

type Film = (String, String, Int, [Int])

testDatabase :: [Film]
testDatabase = [("Director 1","Film 1",2012,[]),("Director 2","Film 2",2,[])]

filmsByDirector :: String -> [Film]
filmsByDirector name = filter (\(a,_,_,_) -> a == name) testDatabase

formatString :: Film -> String
formatString (dir, film, year, rat) = "Director: " ++ (show dir) ++ "\nFilm Name: " ++ (show film) ++ "\nYear:" ++ (show year) ++ "\nRatings: " ++ concatMap (\r -> (show r) ++ " ") rat

formattedByDirector :: String -> String
formattedByDirector dir = concatMap formatString $ filmsByDirector dir

putStrLn $ formattedByDirector "Director 1"

Upvotes: 1

Related Questions