72 lines
1.4 KiB
Haskell
72 lines
1.4 KiB
Haskell
{-# LANGUAGE RecordWildCards #-}
|
|
|
|
module Main
|
|
( main
|
|
)
|
|
where
|
|
|
|
-- licensor
|
|
import Licensor
|
|
|
|
-- base
|
|
import Control.Monad
|
|
import Data.List
|
|
import Data.Monoid ((<>))
|
|
import qualified System.Exit as Exit
|
|
|
|
-- Cabal
|
|
import Distribution.PackageDescription
|
|
import Distribution.Text
|
|
|
|
-- containers
|
|
import qualified Data.Map.Strict as Map
|
|
import qualified Data.Set as Set
|
|
|
|
|
|
-- |
|
|
--
|
|
--
|
|
|
|
main :: IO ()
|
|
main = do
|
|
maybePackage <- getPackage
|
|
|
|
pid <-
|
|
case maybePackage of
|
|
Nothing ->
|
|
Exit.die "Error: No Cabal file found."
|
|
|
|
Just PackageDescription{..} -> do
|
|
putStrLn $
|
|
"Package: "
|
|
<> display package
|
|
<> " ("
|
|
<> "License: "
|
|
<> display license
|
|
<> ")"
|
|
return package
|
|
|
|
maybeDependencies <- getDependencies
|
|
|
|
case maybeDependencies of
|
|
Nothing ->
|
|
Exit.die "Error: ..."
|
|
|
|
Just dependencies -> do
|
|
dependenciesByLicense <-
|
|
fmap (Set.map display) <$> orderPackagesByLicense pid dependencies
|
|
|
|
forM_ (Map.keys dependenciesByLicense) $
|
|
\license ->
|
|
let
|
|
n = dependenciesByLicense Map.! license
|
|
in do
|
|
putStrLn "-----"
|
|
putStrLn $
|
|
show (Set.size n)
|
|
<> (if Set.size n == 1 then " package " else " packages ")
|
|
<> "licensed under "
|
|
<> display license
|
|
<> ": "
|
|
<> intercalate ", " (Set.toList n)
|