{-# LANGUAGE OverloadedStrings #-} module Fetch ( resumes , ads ) where import Data.Text (Text) import qualified Data.Text.IO as T import Data.Either (rights) import Page import Model.Ad (Ad(Ad)) import Model.Resume (Resume) import qualified Model.Resume as Resume import Model.URL (URL) import qualified Parser.Resume as Resume import qualified Parser.Detail as Detail resumes :: [URL] -> IO [Resume] resumes urls = do results <- fmap (concat . map Resume.parse . rights) . sequence . map Page.get $ urls if null results then T.putStrLn "Parsed 0 results!" else return () return results ads :: [Resume] -> IO (Either Text [Ad]) ads = fmap sequence . sequence . map ad ad :: Resume -> IO (Either Text Ad) ad resume = fmap (\x -> Ad resume (Detail.parse x)) <$> Page.get (Resume.url resume)