diff options
author | Profpatsch <mail@profpatsch.de> | 2023-04-08T10·59+0200 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2023-04-08T12·25+0000 |
commit | 5e400b5b2478fa59a84cc9a69c525ada4be6f0c3 (patch) | |
tree | 26af770cb195e20f27289a0c9c5098cca6122e1b /users/Profpatsch/reverse-haskell-deps.hs | |
parent | 6edc2182d113f325d6990684b750707e60123e58 (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.hs | 72 |
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 |