Links xs = do
  let f p = Prelude.map getInfo <$> fetchAllTaggedPosts p XML xs
        where
          getInfo (Left (PF m)) = Left . PF $ unwords [show p, m]
          getInfo (Right r) =
            return . unVAL $ (Proxy ∷ Proxy "file_url") `rget` r
  (g, i, k, s, y) ← runConcurrently $ (,,,,)
                    <$> Concurrently (f Gelbooru)
                    <*> Concurrently (f Ichijou)
                    <*> Concurrently (f Konachan)
                    <*> Concurrently (f Safebooru)
                    <*> Concurrently (f Yandere)
  let ls = g <> i <> k <> s <> y
  return $ length ls `seq` ls

help ∷ String
help = unlines $
  [ "Usage: h-booru tag1 [tag
fetchImageLinks ∷ [Tag] → IO [Parse String]
fetchImageLinks xs = do
  let f p = Prelude.map getInfo <$> fetchAllTaggedPosts p XML xs
        where
          getInfo (Left (PF m)) = Left . PF $ unwords [show p, m]
          getInfo (Right r) =
            return . unVAL $ (Proxy ∷ Proxy "file_url") `rget` r
  (g, i, k, s, y) ← runConcurrently $ (,,,,)
                    <$> Concurrently (f Gelbooru)
                    <*> Concurrently (f Ichijou)
                    <*> Concurrently (f Konachan)
                    <*> Concurrently (f Safebooru)
                    <*> Concurrently (f Yandere)
  let ls = g <> i <> k <> s <> y
  return $ length ls `seq` ls
fetchImageLinks xs = do
  let f p = Prelude.map getInfo <$> fetchAllTaggedPosts p XML xs
        where
          getInfo (Left (PF m)) = Left . PF $ unwords [show p, m]
          getInfo (Right r) =
            return . unVAL $ (Proxy ∷ Proxy "file_url") `rget` r
  (g, i, k, s, y) ← runConcurrently $ (,,,,)
                    <$> Concurrently (f Gelbooru)
                    <*> Concurrently (f Ichijou)
                    <*> Concurrently (f Konachan)
                    <*> Concurrently (f Safebooru)
                    <*> Concurrently (f Yandere)
  let ls = g <> i <> k <> s <> y
  return $ length ls `seq` ls