about summary refs log tree commit diff
path: root/users/Profpatsch/reverse-haskell-deps.hs
diff options
context:
space:
mode:
authorProfpatsch <mail@profpatsch.de>2023-04-08T10·59+0200
committerclbot <clbot@tvl.fyi>2023-04-08T12·25+0000
commit5e400b5b2478fa59a84cc9a69c525ada4be6f0c3 (patch)
tree26af770cb195e20f27289a0c9c5098cca6122e1b /users/Profpatsch/reverse-haskell-deps.hs
parent6edc2182d113f325d6990684b750707e60123e58 (diff)
chore(users/Profpatsch): bring reverse-haskell-deps into shape r/6078
Add a cabal file and move into subdir.
Use MyPrelude & fix a few linter warnings.

Change-Id: I19d5ba47be789fc24f8e02ee8721f73c706ae3e9
Reviewed-on: https://cl.tvl.fyi/c/depot/+/8465
Reviewed-by: Profpatsch <mail@profpatsch.de>
Autosubmit: Profpatsch <mail@profpatsch.de>
Tested-by: BuildkiteCI
Diffstat (limited to 'users/Profpatsch/reverse-haskell-deps.hs')
-rw-r--r--users/Profpatsch/reverse-haskell-deps.hs72
1 files changed, 0 insertions, 72 deletions
diff --git a/users/Profpatsch/reverse-haskell-deps.hs b/users/Profpatsch/reverse-haskell-deps.hs
deleted file mode 100644
index 6b644df9ecc6..000000000000
--- a/users/Profpatsch/reverse-haskell-deps.hs
+++ /dev/null
@@ -1,72 +0,0 @@
-{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE MultiWayIf #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-import qualified Text.HTML.TagSoup as Tag
-import qualified Data.Text as Text
-import Data.Text (Text)
-import qualified Data.List as List
-import Data.Maybe
-import Text.Nicify
-import qualified Text.Read as Read
-import Numeric.Natural
-import Data.Either
-import qualified Data.ByteString as ByteString
-import qualified Data.Text.Encoding
-
-parseNat :: Text.Text -> Maybe Natural
-parseNat = Read.readMaybe . Text.unpack
-
-printNice :: Show a => a -> IO ()
-printNice = putStrLn . nicify . show
-
-type Tag = Tag.Tag Text.Text
-
-main = do
-  reverseHtml <- readStdinUtf8
-  printNice $ List.sortOn snd $ packagesAndReverseDeps reverseHtml
-
-  where
-    readStdinUtf8 = Data.Text.Encoding.decodeUtf8 <$> ByteString.getContents
-
--- | reads the table provided by https://packdeps.haskellers.com/reverse
--- figuring out all sections (starting with the link to the package name),
--- then figuring out the name of the package and the first column,
--- which is the number of reverse dependencies of the package
-packagesAndReverseDeps reverseHtml = do
-  let tags = Tag.parseTags reverseHtml
-  let sections =  Tag.partitions (isJust . reverseLink) tags
-  let sectionNames = map (fromJust . reverseLink . head) sections
-  mapMaybe
-    (\(name :: Text.Text, sect) -> do
-        reverseDeps <- firstNaturalNumber sect
-        pure (sectionPackageName name sect, reverseDeps) :: Maybe (Text.Text, Natural))
-    $ zip sectionNames sections
-
-
-  where
-    reverseLink = \case
-      Tag.TagOpen "a" attrs -> mapFind attrReverseLink attrs
-      _ -> Nothing
-
-    attrReverseLink = \case
-      ("href", lnk) -> if
-          | "packdeps.haskellers.com/reverse/" `Text.isInfixOf` lnk -> Just lnk
-          | otherwise -> Nothing
-      _ -> Nothing
-
-    sectionPackageName :: Text -> [Tag] -> Text
-    sectionPackageName sectionName = \case
-      (_: Tag.TagText name : _) -> name
-      (_: el : _) -> sectionName
-      xs -> sectionName
-
-
-    firstNaturalNumber :: [Tag] -> Maybe Natural
-    firstNaturalNumber =
-      mapFind (\case
-        Tag.TagText t -> parseNat t
-        _ -> Nothing)
-
-    mapFind :: (a -> Maybe b) -> [a] -> Maybe b
-    mapFind f xs = fromJust . f <$> List.find (isJust . f) xs