{-# LANGUAGE OverloadedStrings #-} module Model.Perfume ( Perfume(..) , csvPerfumes , mergePerfumes , fileName ) where import Data.Text (Text) import qualified Data.Text as T import CommandLineOptions (Options(..)) import Model.URL import CSV data Perfume = Perfume { name :: Text , url :: URL } deriving (Eq, Show) csvPerfumes :: [Perfume] -> Text csvPerfumes = getCsv . map (\perfume -> [name perfume, url perfume]) mergePerfumes :: [[Perfume]] -> [[Perfume]] -> [Perfume] mergePerfumes (perfumes1:perfumesSequences) (ignoredPerfumesSequences) = filter (\p1 -> ( all (\perfumes2 -> any (\p2 -> name p1 == name p2) perfumes2 ) perfumesSequences && all (\perfumes2 -> all (\p2 -> name p1 /= name p2) perfumes2 ) ignoredPerfumesSequences ) ) perfumes1 fileName :: Options -> Text fileName (Options materials ignoredMaterials) = let materialNames = T.intercalate "-" materials ignoredMaterialNames = T.intercalate "-" ignoredMaterials in if null ignoredMaterials then materialNames else T.concat [materialNames, "-without-", ignoredMaterialNames]