{-# LANGUAGE PatternGuards, CPP #-} module Main ( main ) where {- I use the following shell script to re-build "hackage-packages.nix": | #! /bin/sh | | set -eu -o pipefail | | cd ~/src/cabal2nix | make --quiet cabal2nix.cabal | cabal build -j hackage2nix | time dist/build/hackage2nix/hackage2nix >hackage-packages.nix | mv hackage-packages.nix ~/.nix-defexpr/pkgs/development/haskell-modules/hackage-packages.nix | nix-env -qaP -A haskellngPackages | tail -1 Make sure that "nix-env -qaP" shows the top-level Nixpkgs attributes at the top level, i.e. without any prefix like "nixos.pkgs". Otherwise, the code that resolver in Distribution/Nixpkgs/PackageMap.hs will produce bogus results. -} -- Run: cabal build -j hackage2nix && time dist/build/hackage2nix/hackage2nix >hackage-packages.nix && mv hackage-packages.nix ~/.nix-defexpr/pkgs/development/haskell-modules/hackage-packages.nix && nix-env -qaP -A haskellngPackages | tail -1 import Cabal2Nix.Flags ( configureCabalFlags ) import Cabal2Nix.Generate ( cabal2nix' ) import Cabal2Nix.Hackage ( readHashedHackage, Hackage ) import Cabal2Nix.Package import Data.List import Data.Function import Control.Monad import Control.Monad.Par.Combinator import Control.Monad.Par.IO import Control.Monad.Trans ( liftIO ) import Data.Map.Strict ( Map ) import qualified Data.Map.Strict as Map import Data.Maybe import Data.Monoid import Data.Set ( Set ) import qualified Data.Set as Set import Distribution.Compiler import Distribution.Nixpkgs.Haskell import Distribution.Nixpkgs.PackageMap import Distribution.Nixpkgs.Util.PrettyPrinting hiding ( attr, (<>) ) import Distribution.Package import Distribution.PackageDescription hiding ( buildDepends, extraLibs, buildTools ) import Distribution.PackageDescription.Configuration import Distribution.System import Distribution.Text import Distribution.Version type Nixpkgs = PackageMap -- Map String (Set [String]) type PackageSet = Map String Version type PackageMultiSet = Map String (Set Version) type Constraint = Dependency resolveConstraint :: Constraint -> Hackage -> Version resolveConstraint c = fromMaybe (error ("constraint " ++ display c ++ " cannot be resolved in Hackage")) . resolveConstraint' c resolveConstraint' :: Constraint -> Hackage -> Maybe Version resolveConstraint' (Dependency (PackageName name) vrange) hackage | Set.null vs = Nothing | otherwise = Just (Set.findMax vs) where vs = Set.filter (`withinRange` vrange) (Map.keysSet (hackage Map.! name)) data Configuration = Configuration { -- |Target architecture. Used by 'finalizePackageDescription' to -- choose appropriate flags and dependencies. platform :: Platform -- |Target compiler. Used by 'finalizePackageDescription' to choose -- appropriate flags and dependencies. , compilerId :: CompilerId -- |Core packages found on Hackageg , corePackages :: [PackageIdentifier] -- |Core packages not found on Hackage. , hardCorePackages :: [PackageIdentifier] -- |These packages replace the latest respective version during -- dependency resolution. , defaultPackageOverrides :: [Constraint] -- |These packages are added to the generated set, but the play no -- role during dependency resolution. , extraPackages :: [Constraint] -- |These packages have not succeeded a build yet, so we give them an -- empty meta.hydraPlatforms attribute to avoid cluttering our Hydra -- output with lots of broken builds. , brokenPackages :: Set PackageName } deriving (Read, Show) main :: IO () main = do hackage <- readHashedHackage nixpkgs <- readNixpkgPackageMap let fixup = Map.delete "acme-everything" -- TODO: https://github.com/NixOS/cabal2nix/issues/164 . Map.delete "type" -- TODO: https://github.com/NixOS/cabal2nix/issues/163 runParIO $ generatePackageSet defaultConfiguration (fixup hackage) nixpkgs generatePackageSet :: Configuration -> Hackage -> Nixpkgs -> ParIO () generatePackageSet config hackage nixpkgs = do let corePackageSet :: PackageSet corePackageSet = Map.fromList [ (name, v) | PackageIdentifier (PackageName name) v <- corePackages config ++ hardCorePackages config ] latestVersionSet :: PackageSet latestVersionSet = Map.map (Set.findMax . Map.keysSet) hackage defaultPackageOverridesSet :: PackageSet defaultPackageOverridesSet = Map.fromList [ (name, resolveConstraint c hackage) | c@(Dependency (PackageName name) _) <- defaultPackageOverrides config ] generatedDefaultPackageSet :: PackageSet generatedDefaultPackageSet = (defaultPackageOverridesSet `Map.union` latestVersionSet) `Map.difference` corePackageSet latestCorePackageSet :: PackageSet latestCorePackageSet = latestVersionSet `Map.intersection` corePackageSet latestOverridePackageSet :: PackageSet latestOverridePackageSet = latestVersionSet `Map.intersection` defaultPackageOverridesSet extraPackageSet :: PackageMultiSet extraPackageSet = Map.unionsWith Set.union [ Map.singleton name (Set.singleton (resolveConstraint c hackage)) | c@(Dependency (PackageName name) _) <- extraPackages config ] db :: PackageMultiSet db = Map.unionsWith Set.union [ Map.map Set.singleton generatedDefaultPackageSet , Map.map Set.singleton latestCorePackageSet , Map.map Set.singleton latestOverridePackageSet , extraPackageSet ] knownAttributesSet :: Set String knownAttributesSet = Set.union (Map.keysSet hackage) (Map.keysSet corePackageSet) resolver :: Dependency -> Bool resolver (Dependency (PackageName name) vrange) | Just v <- Map.lookup name corePackageSet = v `withinRange` vrange | Just v <- Map.lookup name generatedDefaultPackageSet = v `withinRange` vrange | otherwise = False liftIO $ do putStrLn "/* hackage-packages.nix is an auto-generated file -- DO NOT EDIT! */" putStrLn "" putStrLn "{ pkgs, stdenv, callPackage }:" putStrLn "" putStrLn "self: {" putStrLn "" pkgs <- flip parMapM (Map.toAscList db) $ \(name, vs) -> do defs <- forM (Set.toAscList vs) $ \pkgversion -> do srcSpec <- liftIO $ sourceFromHackage Nothing (name ++ "-" ++ display pkgversion) let Just cabalFileHash = lookup "x-cabal-file-hash" (customFieldsPD (packageDescription descr)) -- TODO: Include list of broken dependencies in the generated output. descr = hackage Map.! name Map.! pkgversion (missingDeps, _, drv') = cabal2nix resolver descr drv = drv' { src = srcSpec, editedCabalFile = if revision drv == 0 then "" else cabalFileHash , metaSection = (metaSection drv') { broken = not (Set.null missing) -- Missing Haskell dependencies! , hydraPlatforms = if PackageName name `Set.member` brokenPackages config then Set.singleton "stdenv.lib.platforms.none" else hydraPlatforms (metaSection drv') } , jailbreak = not (null missingDeps) -- Dependency constraints aren't fulfilled } missing :: Set String missing = Set.filter (`Set.notMember` knownAttributesSet) (buildDepends drv `Set.union` testDepends drv) buildInputs :: Map Attribute (Maybe Path) buildInputs = Map.unions [ Map.fromList [ (n, Nothing) | n <- Set.toList missing ] , Map.fromList [ (n, resolveNixpkgsAttribute nixpkgs n) | n <- Set.toAscList (extraLibs drv `Set.union` pkgConfDeps drv) ] , Map.fromList [ (n, resolveNixpkgsOrHackageAttribute nixpkgs hackage n) | n <- Set.toAscList (buildTools drv) ] ] systemOverrides :: Doc systemOverrides = fsep (map (uncurry formatOverride) (Map.toAscList buildInputs)) formatOverride :: Attribute -> Maybe Path -> Doc formatOverride n Nothing = space <> text n <> text " = null;" -- missing attribute formatOverride n (Just []) -- Haskell package: | n == name = formatOverride n Nothing -- refers to a missing system library | otherwise = empty -- found by callPackage formatOverride n (Just p) = (text " inherit" <+> parens (text (intercalate "." p)) <+> text n) <> semi overrides :: Doc overrides = systemOverrides attr | Just v <- Map.lookup name generatedDefaultPackageSet, v == pkgversion = name | otherwise = name ++ '_' : [ if c == '.' then '_' else c | c <- display pkgversion ] return $ nest 2 $ hang (string attr <+> equals <+> text "callPackage") 2 (parens (pPrint drv)) <+> (braces overrides <> semi) return (intercalate "\n\n" (map render defs)) liftIO $ mapM_ (\pkg -> putStrLn pkg >> putStrLn "") pkgs liftIO $ putStrLn "}" resolveNixpkgsOrHackageAttribute :: Nixpkgs -> Hackage -> Attribute -> Maybe Path resolveNixpkgsOrHackageAttribute nixpkgs hackage name | p@(Just _) <- resolveNixpkgsAttribute nixpkgs name = p | Just _ <- Map.lookup name hackage = Just [] | otherwise = Nothing resolveNixpkgsAttribute :: Nixpkgs -> Attribute -> Maybe Path resolveNixpkgsAttribute nixpkgs name | name `elem` ["clang","lldb","llvm"] = Just ["self","llvmPackages"] | Just paths <- Map.lookup name nixpkgs = getShortestPath (Set.toList (paths `Set.intersection` goodScopes)) | otherwise = Nothing where goodScopes :: Set Path goodScopes = Set.fromList [[], ["xlibs"], ["gnome"], ["gnome3"], ["kde4"]] getShortestPath :: [Path] -> Maybe Path getShortestPath [] = Nothing getShortestPath ps = Just ("pkgs" : minimumBy (on compare length) ps) cabal2nix :: (Dependency -> Bool) -> GenericPackageDescription -> ([Dependency], FlagAssignment, Derivation) cabal2nix resolver cabal = (missingDeps, flags, drv) where drv = cabal2nix' descr Right (descr, flags) = finalize (if null missingDeps then resolver else const True) cabal missingDeps :: [Dependency] missingDeps = either id (const []) (finalize resolver cabal') finalize :: (Dependency -> Bool) -> GenericPackageDescription -> Either [Dependency] (PackageDescription, FlagAssignment) finalize resolver' = finalizePackageDescription (configureCabalFlags (package (packageDescription cabal))) resolver' (Platform X86_64 Linux) -- shouldn't be hardcoded #if MIN_VERSION_Cabal(1,22,0) (unknownCompilerInfo (CompilerId GHC (Version [7,8,4] [])) NoAbiTag) #else (CompilerId GHC (Version [7,8,4] [])) #endif [] -- no additional constraints -- A variant of the cabal file that has all test suites enabled to ensure -- that their dependencies are recognized by finalizePackageDescription. cabal' :: GenericPackageDescription cabal' = cabal { condTestSuites = flaggedTests } flaggedTests :: [(String, CondTree ConfVar [Dependency] TestSuite)] flaggedTests = map (\(n, t) -> (n, mapTreeData enableTest t)) (condTestSuites cabal) enableTest :: TestSuite -> TestSuite enableTest t = t { testEnabled = True } defaultConfiguration :: Configuration defaultConfiguration = Configuration { platform = Platform X86_64 Linux , compilerId = CompilerId GHC (Version [7,8,4] []) , defaultPackageOverrides = map (\s -> fromMaybe (error (show s ++ " is not a valid override selector")) (simpleParse s)) [ "blaze-builder < 0.4" -- the new version breaks many builds, like streaming-commons , "blaze-html < 0.8" -- new versions break pandoc , "blaze-markup < 0.7" -- new versions break pandoc , "control-monad-free < 0.6" -- newer versions don't compile with anything but GHC 7.8.x , "haddock-library == 1.1.*" -- new versions break pandoc , "HStringTemplate < 0.8" -- 0.8 depends on time >= 1.5, which we cannot provide in GHC 7.8.x , "mtl == 2.1.*" -- newer versions require transformers > 0.4.x, which we cannot provide in GHC 7.8.x , "primitive < 0.6" -- newer versions break lens and others packages , "QuickCheck < 2.8" -- 2.8 breaks chell-quickcheck-0.2.4 , "utf8-string < 1" -- version 1 breaks several packages right now, most notably hint ] , corePackages = map (\s -> fromMaybe (error (show s ++ " is not a valid core package")) (simpleParse s)) [ "Cabal-1.18.1.5" , "array-0.5.0.0" , "base-4.7.0.2" , "binary-0.7.1.0" , "bytestring-0.10.4.0" , "containers-0.5.5.1" , "deepseq-1.3.0.2" , "directory-1.2.1.0" , "filepath-1.3.0.2" , "ghc-prim-0.3.1.0" , "haskeline-0.7.1.2" , "haskell2010-1.1.2.0" , "haskell98-2.0.0.3" , "hoopl-3.10.0.1" , "hpc-0.6.0.1" , "integer-gmp-0.5.1.0" , "old-locale-1.0.0.6" , "old-time-1.1.0.2" , "pretty-1.1.1.1" , "process-1.2.0.0" , "template-haskell-2.9.0.0" , "terminfo-0.4.0.0" , "time-1.4.2" , "transformers-0.3.0.0" , "unix-2.7.0.1" , "xhtml-3000.2.1" ] , hardCorePackages = map (\s -> fromMaybe (error (show s ++ " is not a valid core package")) (simpleParse s)) [ "bin-package-db-0.0.0.0" , "ghc-7.8.4" , "rts-1.0" ] , extraPackages = map (\s -> fromMaybe (error (show s ++ " is not a valid extra package selector")) (simpleParse s)) [ "aeson < 0.8" -- newer versions don't work with GHC 6.12.3 , "blaze-markup >=0.5.2.1 && <0.6.3.0" -- required by idris-0.9.17.1 , "blaze-html < 0.7.1" -- required by idris-0.9.17.1 , "c2hs < 0.21" -- newer versions cannot compile ncurses , "Cabal == 1.18.*" -- required for cabal-install et al on old GHC versions , "Cabal == 1.20.*" -- required for cabal-install et al on old GHC versions , "cabal-install == 1.18.*" -- required for ghc-mod on 7.8.x , "cpphs < 1.19" -- required to build Agda , "haddock-api < 2.16" -- required on GHC 7.8.x , "containers < 0.5" -- required to build alex with GHC 6.12.3 , "deepseq == 1.3.0.1" -- required to build Cabal with GHC 6.12.3 , "descriptive < 0.1" -- required for structured-haskell-mode-1.0.8 , "equivalence == 0.2.5" -- required to build Agda with GHC 7.8.x , "gloss < 1.9.3" -- new versions don't compile with GHC 7.8.x , "haskell-src-exts < 1.16" -- required for structured-haskell-mode-1.0.8 , "lens >=4.1.1 && <4.8" -- required by idris-0.9.17.1 , "mtl-prelude < 2" -- required for to build postgrest on mtl 2.1.x platforms , "optparse-applicative == 0.10.*" -- required for elm-make 0.1.1 and elm-package 0.4 , "parallel == 3.2.0.3" -- newer versions don't work with GHC 6.12.3 , "primitive == 0.5.1.*" -- required to build alex with GHC 6.12.3 , "QuickCheck < 2" -- required by test-framework-quickcheck and its users , "seqid < 0.2" -- newer versions depend on transformers 0.4.x which we cannot provide in GHC 7.8.x , "seqid-streams < 0.2" -- newer versions depend on transformers 0.4.x which we cannot provide in GHC 7.8.x , "split < 0.2" -- newer versions don't work with GHC 6.12.3 , "vector < 0.10.10" -- newer versions don't work with GHC 6.12.3 ] , brokenPackages = Set.fromList $ map PackageName [ "3dmodels" , "4Blocks" , "abcBridge" , "abstract-par-accelerate" , "AC-BuildPlatform" , "accelerate-fftw" , "accentuateus" , "access-time" , "AC-EasyRaster-GTK" , "AC-HalfInteger" , "acme-numbersystem" , "acme-schoenfinkel" , "AC-Terminal" , "ActionKid" , "activehs" , "actor" , "AC-VanillaArray" , "adaptive-containers" , "adaptive-tuple" , "adhoc-network" , "ADPfusion" , "adp-multi" , "adp-multi-monadiccp" , "Advgame" , "AERN-Basics" , "AERN-Net" , "AERN-Real" , "AERN-Real-Double" , "AERN-Real-Interval" , "AERN-RnToRm" , "AERN-RnToRm-Plot" , "aeson-bson" , "AesonBson" , "aeson-native" , "afv" , "Agata" , "agda-server" , "airbrake" , "aivika-transformers" , "ajhc" , "alea" , "algebraic" , "alms" , "alpha" , "alpino-tools" , "alsa" , "alsa-midi" , "alsa-pcm-tests" , "alsa-seq-tests" , "altfloat" , "alure" , "amazon-emailer" , "AMI" , "anansi-pandoc" , "anatomy" , "AndroidViewHierarchyImporter" , "Animas" , "Annotations" , "antagonist" , "antfarm" , "antimirov" , "antlrc" , "anydbm" , "aosd" , "apelsin" , "apiary-helics" , "apis" , "apotiki" , "ApplePush" , "AppleScript" , "approx-rand-test" , "arbb-vm" , "arb-fft" , "archiver" , "archlinux" , "archlinux-web" , "argparser" , "arguedit" , "ariadne" , "arith-encode" , "armada" , "ArrayRef" , "arrowp" , "ascii85-conduit" , "asic" , "asil" , "AspectAG" , "assimp" , "astrds" , "astview" , "async-extras" , "atlassian-connect-core" , "atlassian-connect-descriptor" , "atom-msp430" , "atomo" , "AttoBencode" , "attoparsec-iteratee" , "attoparsec-text" , "attoparsec-text-enumerator" , "atuin" , "augeas" , "augur" , "authoring" , "AutoForms" , "avers" , "AvlTree" , "awesomium" , "awesomium-glut" , "awesomium-raw" , "AWin32Console" , "aws-cloudfront-signer" , "aws-elastic-transcoder" , "aws-kinesis-reshard" , "aws-sdk" , "aws-sign4" , "aws-sns" , "azure-service-api" , "backdropper" , "backtracking-exceptions" , "bamboo" , "bamboo-launcher" , "bamboo-plugin-highlight" , "bamboo-plugin-photo" , "bamboo-theme-blueprint" , "bamboo-theme-mini-html5" , "bamse" , "barchart" , "barley" , "Barracuda" , "barrie" , "barrier-monad" , "baskell" , "battleships" , "bayes-stack" , "beamable" , "beautifHOL" , "bed-and-breakfast" , "Befunge93" , "bein" , "berkeleydb" , "BerkeleyDBXML" , "berp" , "bff" , "bidirectionalization-combined" , "billboard-parser" , "billeksah-forms" , "billeksah-main" , "billeksah-pane" , "billeksah-services" , "binary-derive" , "binary-file" , "binary-protocol-zmq" , "binary-streams" , "binding-gtk" , "bindings-apr" , "bindings-apr-util" , "bindings-bfd" , "bindings-cctools" , "bindings-codec2" , "bindings-common" , "bindings-dc1394" , "bindings-eskit" , "bindings-EsounD" , "bindings-fann" , "bindings-friso" , "bindings-gts" , "bindings-hdf5" , "bindings-K8055" , "bindings-levmar" , "bindings-libftdi" , "bindings-librrd" , "bindings-libstemmer" , "bindings-libv4l2" , "bindings-linux-videodev2" , "bindings-mpdecimal" , "bindings-sc3" , "bindings-sipc" , "bind-marshal" , "Biobase" , "BiobaseBlast" , "BiobaseDotP" , "BiobaseFasta" , "BiobaseFR3D" , "BiobaseInfernal" , "BiobaseMAF" , "BiobaseTrainingData" , "BiobaseTurner" , "BiobaseTypes" , "BiobaseVienna" , "biophd" , "biostockholm" , "bird" , "BirdPP" , "bit-array" , "bitcoin-rpc" , "Bitly" , "bitly-cli" , "bits-conduit" , "bitset" , "bitspeak" , "BitSyntax" , "bittorrent" , "bkr" , "bla" , "black-jewel" , "blakesum" , "blakesum-demo" , "blas" , "blas-hs" , "blaze" , "blaze-html-contrib" , "blaze-html-hexpat" , "blaze-textual-native" , "Blobs" , "blogination" , "BlogLiterately-diagrams" , "Blueprint" , "BNFC-meta" , "board-games" , "bogre-banana" , "boolean-normal-forms" , "bools" , "boomslang" , "borel" , "bot" , "Bravo" , "breakout" , "brians-brain" , "bsd-sysctl" , "bson-generics" , "bson-mapping" , "btree-concurrent" , "buildbox-tools" , "bullet" , "buster" , "Buster" , "buster-gtk" , "buster-network" , "bytable" , "bytestring-class" , "bytestring-csv" , "bytestringparser" , "bytestring-rematch" , "bytestring-short" , "cabal2arch" , "cabal2doap" , "cabal2spec" , "cabal-constraints" , "cabal-dev" , "cabalgraph" , "cabal-graphdeps" , "Cabal-ide-backend" , "cabal-install-ghc72" , "cabal-install-ghc74" , "cabalmdvrpm" , "cabal-query" , "cabalrpmdeps" , "cabal-scripts" , "cabal-setup" , "cabal-test" , "cabal-upload" , "cal3d" , "cal3d-examples" , "cal3d-opengl" , "calc" , "caldims" , "caledon" , "campfire" , "cantor" , "cao" , "cap" , "Capabilities" , "caramia" , "carboncopy" , "carettah" , "casadi-bindings" , "casadi-bindings-control" , "casadi-bindings-core" , "casadi-bindings-internal" , "casadi-bindings-ipopt-interface" , "casadi-bindings-snopt-interface" , "Cascade" , "cascading" , "cash" , "cassandra-thrift" , "cassy" , "castle" , "casui" , "catch-fd" , "categorical-algebra" , "category-extras" , "CBOR" , "CC-delcont-alt" , "cci" , "cctools-workqueue" , "cedict" , "cereal-enumerator" , "cereal-ieee754" , "cereal-plus" , "cflp" , "cfopu" , "cgen" , "cgi" , "cgi-undecidable" , "cgi-utils" , "chalkboard" , "chalkboard-viewer" , "charade" , "chatter" , "checked" , "check-pvp" , "Chitra" , "chp" , "chp-mtl" , "chp-plus" , "chp-spec" , "chp-transformers" , "chuchu" , "chunks" , "church-list" , "cil" , "cinvoke" , "c-io" , "cio" , "citation-resolve" , "clafer" , "claferIG" , "claferwiki" , "clash" , "ClassLaws" , "ClassyPrelude" , "clckwrks" , "clckwrks-cli" , "clckwrks-dot-com" , "clckwrks-plugin-bugs" , "clckwrks-plugin-ircbot" , "clckwrks-plugin-media" , "clckwrks-plugin-page" , "clckwrks-theme-bootstrap" , "clckwrks-theme-clckwrks" , "clckwrks-theme-geo-bootstrap" , "Clean" , "cless" , "clifford" , "clipper" , "clippings" , "clist" , "clocked" , "clogparse" , "clone-all" , "cloudfront-signer" , "cloudyfs" , "clua" , "cluss" , "clustertools" , "clutterhs" , "cmath" , "cmathml3" , "CMCompare" , "cmdargs-browser" , "cmonad" , "cnc-spec-compiler" , "Coadjute" , "Codec-Image-DevIL" , "codec-libevent" , "codecov-haskell" , "codemonitor" , "codepad" , "cognimeta-utils" , "colada" , "colchis" , "collada-output" , "collada-types" , "collections" , "coltrane" , "com" , "Combinatorrent" , "commodities" , "comonad-extras" , "comonad-random" , "compact-map" , "compact-string" , "complexity" , "compression" , "computational-algebra" , "concraft-hr" , "concurrent-state" , "condor" , "Condor" , "condorcet" , "conductive-clock" , "conductive-hsc3" , "conduit-audio-lame" , "conduit-audio-samplerate" , "conduit-iconv" , "conduit-network-stream" , "conduit-resumablesink" , "config-select" , "conjure" , "connection-pool" , "consistent" , "const-math-ghc-plugin" , "constructive-algebra" , "consul-haskell" , "context-stack" , "continue" , "continuum" , "continuum-client" , "Contract" , "control-event" , "control-monad-attempt" , "control-monad-exception-mtl" , "control-monad-failure" , "control-monad-failure-mtl" , "Control-Monad-MultiPass" , "contstuff-monads-tf" , "contstuff-transformers" , "convertible-ascii" , "convertible-text" , "copilot" , "copilot-cbmc" , "COrdering" , "corebot-bliki" , "CoreFoundation" , "core-haskell" , "Coroutine" , "coroutine-iteratee" , "CouchDB" , "couchdb-conduit" , "couchdb-enumerator" , "couch-hs" , "court" , "CPBrainfuck" , "cplusplus-th" , "cpuperf" , "cpython" , "cqrs" , "cqrs-example" , "cqrs-postgresql" , "cqrs-sqlite3" , "cqrs-test" , "cqrs-types" , "cr" , "crack" , "Craft3e" , "craftwerk-gtk" , "crc16" , "crf-chain1" , "crf-chain2-generic" , "criterion-plus" , "crocodile" , "cron" , "crypto-cipher-benchmarks" , "cryptsy-api" , "crystalfontz" , "cse-ghc-plugin" , "cspmchecker" , "CSPM-cspm" , "CSPM-FiringRules" , "CSPM-Frontend" , "CSPM-Interpreter" , "CSPM-ToProlog" , "ctemplate" , "ctkl" , "cudd" , "curlhs" , "curry-base" , "CurryDB" , "curry-frontend" , "cursedcsv" , "CV" , "cv-combinators" , "cypher" , "DAG-Tournament" , "dao" , "Dao" , "dapi" , "darcs2dot" , "darcs-benchmark" , "darcs-beta" , "darcs-buildpackage" , "darcs-cabalized" , "darcsden" , "darcs-fastconvert" , "darcs-graph" , "DarcsHelpers" , "darcs-monitor" , "darcs-scripts" , "darcswatch" , "data-dispersal" , "data-easy" , "data-extra" , "data-ivar" , "data-lens-ixset" , "datalog" , "data-nat" , "data-object-json" , "data-object-yaml" , "data-quotientref" , "data-rope" , "Data-Rope" , "data-store" , "DataTreeView" , "data-type" , "dbjava" , "d-bus" , "DBus" , "dbus-client" , "dclabel" , "ddci-core" , "ddc-tools" , "dead-simple-json" , "decepticons" , "DecisionTree" , "decoder-conduit" , "dedukti" , "deepseq-bounded" , "deepseq-th" , "deepzoom" , "defargs" , "DefendTheKing" , "definitive-filesystem" , "definitive-graphics" , "definitive-reactive" , "definitive-sound" , "deka" , "deka-tests" , "delicious" , "denominate" , "derangement" , "derivation-trees" , "derive-gadt" , "derive-IG" , "derp-lib" , "dewdrop" , "Dflow" , "dfsbuild" , "dgs" , "diagrams-builder" , "diagrams-haddock" , "diagrams-pdf" , "diagrams-tikz" , "dice-entropy-conduit" , "dictparser" , "diffcabal" , "DifferenceLogic" , "DifferentialEvolution" , "digestive-functors-hsp" , "DimensionalHash" , "dingo-core" , "dingo-example" , "dingo-widgets" , "direct-fastcgi" , "direct-plugins" , "DirectSound" , "dirfiles" , "discount" , "disjoint-set" , "DisTract" , "distributed-process-azure" , "distributed-process-execution" , "distributed-process-registry" , "distributed-process-task" , "distributed-process-zookeeper" , "distribution-plot" , "dist-upload" , "djinn-th" , "DnaProteinAlignment" , "dnscache" , "dnssd" , "doccheck" , "docker" , "doc-review" , "DocTest" , "doctest-discover" , "doctest-discover-configurator" , "DOM" , "download" , "download-media-content" , "DP" , "dph-examples" , "dph-lifted-base" , "dph-lifted-copy" , "dph-lifted-vseg" , "dph-par" , "dph-prim-par" , "dph-seq" , "DPM" , "DrHylo" , "dropbox-sdk" , "dropsolve" , "DSH" , "ds-kanren" , "dsmc" , "dsmc-tools" , "dsp" , "DSTM" , "dstring" , "dtab" , "DTC" , "dtd" , "dtd-text" , "dtd-types" , "Dust" , "Dust-crypto" , "Dust-tools" , "Dust-tools-pcap" , "dvda" , "dvdread" , "dx9base" , "dx9d3d" , "dx9d3dx" , "dynamic-object" , "dynobud" , "DysFRP-Cairo" , "DysFRP-Craftwerk" , "easy-api" , "easyplot" , "easyrender" , "ecdsa" , "ecma262" , "ecu" , "ed25519" , "edenskel" , "edge" , "edit-lenses" , "editline" , "EditTimeReport" , "EEConfig" , "effective-aspects" , "effective-aspects-mzv" , "effect-monad" , "egison-quote" , "ehaskell" , "eibd-client-simple" , "eithers" , "EitherT" , "elerea-sdl" , "Elm" , "elm-get" , "elm-reactor" , "elm-server" , "elm-yesod" , "email" , "email-postmark" , "embeddock" , "embeddock-example" , "embroidery" , "Emping" , "empty" , "enumeration" , "enumfun" , "EnumMap" , "enummapmap" , "enummapset" , "env-parser" , "epoll" , "epubname" , "Eq" , "erlang" , "eros-client" , "error-message" , "esotericbot" , "EsounD" , "estimators" , "estreps" , "Etage" , "Etage-Graph" , "eternal" , "Eternal10Seconds" , "Etherbunny" , "ethereum-client-haskell" , "ethereum-merkle-patricia-db" , "eurofxref" , "Euterpea" , "event-monad" , "EventSocket" , "every-bit-counts" , "ewe" , "exif" , "expand" , "expat-enumerator" , "explain" , "explicit-sharing" , "explore" , "exposed-containers" , "exp-pairs" , "extcore" , "extemp" , "extended-categories" , "ez-couch" , "factual-api" , "FailureT" , "fallingblocks" , "falling-turnip" , "family-tree" , "fastcgi" , "fastirc" , "fay-hsx" , "fcd" , "fckeditor" , "FComp" , "feed2lj" , "feed2twitter" , "feldspar-compiler" , "feldspar-language" , "fences" , "fenfire" , "FermatsLastMargin" , "ffeed" , "ffmpeg-light" , "ffmpeg-tutorials" , "fft" , "fibon" , "fields" , "FieldTrip" , "fieldwise" , "FileManip" , "FileSystem" , "filesystem-conduit" , "Finance-Quote-Yahoo" , "Finance-Treasury" , "find-conduit" , "FiniteMap" , "first-class-patterns" , "firstify" , "FirstOrderTheory" , "fit" , "fitsio" , "fixed-point" , "fixed-point-vector" , "fixed-point-vector-space" , "fixed-precision" , "fixed-storable-array" , "fix-parser-simple" , "fix-symbols-gitit" , "flexiwrap" , "flexiwrap-smallcheck" , "flickr" , "Flippi" , "flite" , "flowdock" , "flowdock-api" , "flower" , "FModExRaw" , "FM-SBLEX" , "foldl-incremental" , "folds" , "folds-common" , "follower" , "Folly" , "font-opengl-basic4x6" , "foo" , "fordo" , "for-free" , "formal" , "FormalGrammars" , "forml" , "formlets" , "formlets-hsp" , "ForSyDe" , "fpco-api" , "fpnla-examples" , "frag" , "franchise" , "Frank" , "free-game" , "freekick2" , "freenect" , "free-operational" , "freesect" , "free-theorems" , "free-theorems-counterexamples" , "free-theorems-seq" , "free-theorems-seq-webui" , "free-theorems-webui" , "FreeTypeGL" , "friday" , "friday-devil" , "fs-events" , "ftdi" , "ftp-conduit" , "ftshell" , "full-sessions" , "fullstop" , "full-text-search" , "functional-arrow" , "function-combine" , "functor-apply" , "functorm" , "funion" , "funsat" , "future" , "fuzzytime" , "gact" , "gameclock" , "Gamgine" , "Ganymede" , "gbu" , "gc-monitoring-wai" , "gdiff-ig" , "gdiff-th" , "gemstone" , "gencheck" , "generic-church" , "genericserialize" , "generic-storable" , "generic-xml" , "genetics" , "GenI" , "geniconvert" , "geni-gui" , "geniserver" , "geni-util" , "GenSmsPdu" , "GeoIp" , "geojson" , "GeomPredicates-SSE" , "getemx" , "getflag" , "gf" , "ghc-dup" , "ghc-events-analyze" , "ghc-generic-instances" , "ghci-diagrams" , "ghci-haskeline" , "ghci-ng" , "ghclive" , "ghc-prim_0_4_0_0" , "ghc-server" , "ghc-syb" , "ght" , "ginsu" , "gist" , "git-all" , "git-checklist" , "gitdo" , "git-gpush" , "gitlib-cross" , "gitlib-s3" , "gitlib-utils" , "git-repair" , "gitson" , "gladexml-accessor" , "GLFW-OGL" , "glider-nlp" , "glome-hs" , "GlomeTrace" , "GlomeView" , "gloss-examples" , "gmap" , "gmndl" , "gnome-desktop" , "gnome-keyring" , "gnomevfs" , "g-npm" , "goa" , "goatee-gtk" , "gofer-prelude" , "google-html5-slide" , "googleplus" , "GoogleSB" , "gopherbot" , "gpah" , "GPipe" , "GPipe-Collada" , "GPipe-Examples" , "GPipe-TextureLoad" , "gps" , "gps2htmlReport" , "GPX" , "gpx-conduit" , "grammar-combinators" , "GrammarProducts" , "GraphHammer-examples" , "graphicsFormats" , "graphics-formats-collada" , "graphicstools" , "graph-rewriting-cl" , "graph-rewriting-lambdascope" , "graphtype" , "graph-utils" , "greg-client" , "Grempa" , "grm" , "Grow" , "GrowlNotify" , "gruff" , "gruff-examples" , "gsl-random" , "gsl-random-fu" , "gsmenu" , "GTALib" , "gtfs" , "gtk2hs-cast-gnomevfs" , "gtk2hs-cast-gtk" , "gtk2hs-cast-gtkglext" , "Gtk2hsGenerics" , "gtk2hs-rpn" , "gtk3-mac-integration" , "gtkglext" , "GtkGLTV" , "gtkimageview" , "gtk-mac-integration" , "gtkrsync" , "gtk-serialized-event" , "gtk-toy" , "guess-combinator" , "GuiHaskell" , "GuiTV" , "haar" , "Hach" , "hack2-contrib-extra" , "hack2-handler-happstack-server" , "hack2-handler-mongrel2-http" , "hack2-handler-warp" , "hack2-interface-wai" , "hackage2hwn" , "hackage2twitter" , "hackage-diff" , "hackage-proxy" , "hackage-server" , "hackage-sparks" , "hack-contrib" , "hack-contrib-press" , "hackernews" , "hack-frontend-happstack" , "hack-frontend-monadcgi" , "hack-handler-epoll" , "hack-handler-evhttp" , "hack-handler-fastcgi" , "hack-handler-happstack" , "hack-handler-hyena" , "hack-handler-kibro" , "hack-handler-simpleserver" , "hack-middleware-clientsession" , "hack-middleware-jsonp" , "hactor" , "haddock-leksah" , "haggis" , "Haggressive" , "hairy" , "hakaru" , "hakismet" , "hakyll-blaze-templates" , "hakyll-contrib" , "hakyll-contrib-links" , "hakyll-elm" , "halberd" , "HaLeX" , "halfs" , "halipeto" , "hampp" , "hamtmap" , "hamusic" , "handle-like" , "happindicator" , "happindicator3" , "happraise" , "HAppS-Data" , "HAppSHelpers" , "happs-hsp" , "happs-hsp-template" , "HAppS-IxSet" , "HAppS-Server" , "HAppS-State" , "happstack-auth" , "happstack-clientsession" , "happstack-contrib" , "happstack-data" , "happstack-dlg" , "happstack-facebook" , "happstack-fastcgi" , "happstack-fay" , "happstack-foundation" , "happstack-heist" , "happstack-helpers" , "happstack-ixset" , "happstack-monad-peel" , "happstack-plugins" , "happstack-state" , "happstack-util" , "happstack-yui" , "happs-tutorial" , "HAppS-Util" , "happybara" , "happybara-webkit" , "happybara-webkit-server" , "harchive" , "HaRe" , "hark" , "HarmTrace" , "HarmTrace-Base" , "harpy" , "has" , "hascal" , "hascat" , "hascat-lib" , "hascat-setup" , "hascat-system" , "HasGP" , "hash" , "hashable-generics" , "Hashell" , "hasim" , "hask" , "haskanoid" , "haskarrow" , "haskdeep" , "haskeem" , "haskeline-class" , "haskell-aliyun" , "haskell-awk" , "haskell-bcrypt" , "haskell-brainfuck" , "haskell-cnc" , "haskelldb-dynamic" , "haskelldb-hdbc-mysql" , "haskelldb-hsql" , "haskelldb-hsql-mysql" , "haskelldb-hsql-odbc" , "haskelldb-hsql-postgresql" , "haskelldb-hsql-sqlite3" , "haskelldb-wx" , "haskell-formatter" , "haskell-ftp" , "haskell-neo4j-client" , "HaskellNN" , "Haskelloids" , "haskell-openflow" , "haskell-pdf-presenter" , "haskell-platform-test" , "haskell-plot" , "haskell-reflect" , "haskell-rules" , "haskellscrabble" , "haskell-spacegoo" , "haskell-src-meta-mwotton" , "haskell-token-utils" , "HaskellTorrent" , "haskell-type-exts" , "haskell-tyrant" , "haskell-xmpp" , "haskelm" , "haskgame" , "haskheap" , "haskhol-core" , "hask-home" , "haskmon" , "haskoin-wallet" , "haskoon" , "haskoon-httpspec" , "haskoon-salvia" , "haskore-supercollider" , "haskore-synthesizer" , "haslo" , "hasloGUI" , "hasparql-client" , "hastache-aeson" , "has-th" , "hat" , "hatex-guide" , "HaTeX-meta" , "hawitter" , "Hawk" , "haxparse" , "hayland" , "Hayoo" , "hback" , "hbb" , "hBDD-CUDD" , "hbeat" , "hblas" , "hblock" , "h-booru" , "hburg" , "hcheat" , "hchesslib" , "HCL" , "hcltest" , "hcron" , "hCsound" , "hcwiid" , "hdaemonize-buildfix" , "HDBC-mysql" , "hdbi-conduit" , "hDFA" , "hdigest" , "hdirect" , "hdis86" , "hdiscount" , "hdm" , "HDRUtils" , "hecc" , "Hedi" , "heist-aeson" , "helics" , "helics-wai" , "hellage" , "hellnet" , "helm" , "hemkay" , "hemokit" , "hen" , "henet" , "HERA" , "her-lexer" , "her-lexer-parsec" , "Hermes" , "hermit-syb" , "hesql" , "hetris" , "heukarya" , "hevolisa" , "hevolisa-dph" , "hexpat-iteratee" , "hexpat-pickle-generic" , "hexquote" , "hF2" , "hfann" , "hfd" , "hfiar" , "hfsevents" , "hgalib" , "HGamer3D" , "HGamer3D-API" , "HGamer3D-Audio" , "HGamer3D-CAudio-Binding" , "HGamer3D-CEGUI-Binding" , "HGamer3D-Enet-Binding" , "HGamer3D-Graphics3D" , "HGamer3D-GUI" , "HGamer3D-InputSystem" , "HGamer3D-Network" , "HGamer3D-Ogre-Binding" , "HGamer3D-OIS-Binding" , "HGamer3D-SDL2-Binding" , "HGamer3D-SFML-Binding" , "HGamer3D-WinEvent" , "HGamer3D-Wire" , "hg-buildpackage" , "hgen" , "hgeometric" , "hgithub" , "hgom" , "h-gpgme" , "hharp" , "HHDL" , "hiccup" , "hieraclus" , "hierarchical-clustering-diagrams" , "hiernotify" , "Hieroglyph" , "HiggsSet" , "higherorder" , "highWaterMark" , "hills" , "himg" , "himpy" , "hinduce-classifier" , "hinduce-classifier-decisiontree" , "hinduce-examples" , "hinvaders" , "hinze-streams" , "hircules" , "hirt" , "hissmetrics" , "historian" , "hist-pl" , "hist-pl-lmf" , "hjs" , "HJVM" , "hlbfgsb" , "hlcm" , "HLearn-algebra" , "HLearn-approximation" , "HLearn-classification" , "HLearn-datastructures" , "HLearn-distributions" , "hledger-chart" , "hledger-vty" , "hlibev" , "hlibfam" , "HListPP" , "hlogger" , "HLogger" , "hmark" , "hmarkup" , "hmatrix-banded" , "hmatrix-gsl-stats" , "hmatrix-quadprogpp" , "hmatrix-static" , "hmatrix-syntax" , "hmeap-utils" , "HMM" , "hMollom" , "hmp3" , "Hmpf" , "hmumps" , "HNM" , "hnn" , "hoauth" , "hob" , "hobbits" , "HODE" , "hofix-mtl" , "hog" , "hogre" , "hogre-examples" , "hois" , "holey-format" , "Holumbus-Distribution" , "Holumbus-MapReduce" , "Holumbus-Searchengine" , "Holumbus-Storage" , "homeomorphic" , "hommage" , "hommage-ds" , "HongoDB" , "hoodle-extra" , "hoovie" , "hopencc" , "hopencl" , "hopfield" , "hoq" , "hothasktags" , "hp2any-manager" , "hpage" , "hpapi" , "hpaste" , "hpasteit" , "HPath" , "hpc-coveralls" , "hpc-tracer" , "hplaylist" , "HPlot" , "hpodder" , "HPong" , "hprotoc-fork" , "hps-cairo" , "hPushover" , "hpygments" , "hpylos" , "hquantlib" , "hR" , "hranker" , "HRay" , "Hricket" , "HROOT" , "HROOT-core" , "HROOT-graf" , "HROOT-hist" , "HROOT-io" , "HROOT-math" , "hruby" , "hs2bf" , "hs2dot" , "Hs2lib" , "hsbackup" , "hsc2hs" , "hsc3-cairo" , "hsc3-data" , "hsc3-forth" , "hsc3-graphs" , "hsc3-lang" , "hsc3-lisp" , "hsc3-plot" , "hsc3-rec" , "hsc3-server" , "hsc3-unsafe" , "hscamwire" , "hs-carbon-examples" , "hscassandra" , "hs-cdb" , "hsclock" , "hscurses" , "hscurses-fish-ex" , "hs-dotnet" , "Hsed" , "hsfacter" , "HSFFIG" , "hs-ffmpeg" , "hs-fltk" , "hs-GeoIP" , "hsgnutls" , "hsgnutls-yj" , "hsgsom" , "HsHaruPDF" , "HSHHelpers" , "HsHyperEstraier" , "hsignal" , "hSimpleDB" , "hs-json-rpc" , "HsJudy" , "hskeleton" , "hslibsvm" , "hslogger4j" , "hs-logo" , "hslogstash" , "hsmagick" , "HSmarty" , "Hsmtlib" , "hsmtpclient" , "hsndfile-storablevector" , "hsns" , "hsntp" , "hsoptions" , "HSoundFile" , "hsparql" , "HsParrot" , "hsp-cgi" , "hspec-expectations-pretty" , "hspec-experimental" , "hspec-shouldbe" , "hspec-snap" , "HsPerl5" , "hs-pgms" , "hs-pkpass" , "hspread" , "hspresent" , "hsql-mysql" , "hsqml-demo-samples" , "hsqml-morris" , "hsSqlite3" , "HsSVN" , "hstatistics" , "hstats" , "hstest" , "hstidy" , "hstorchat" , "hstradeking" , "hs-twitter" , "hs-twitterarchiver" , "hstyle" , "hsubconvert" , "HSvm" , "hswip" , "hsx" , "hsXenCtrl" , "hsx-xhtml" , "hsyscall" , "hszephyr" , "HTab" , "hTalos" , "HTicTacToe" , "html2hamlet" , "htoml" , "http-client-request-modifiers" , "http-conduit-browser" , "http-enumerator" , "http-monad" , "http-proxy" , "https-everywhere-rules" , "http-shed" , "HTTP-Simple" , "httpspec" , "htune" , "htzaar" , "hubris" , "hugs2yc" , "hulk" , "hums" , "HUnit-Diff" , "hunit-gui" , "HUnit-Plus" , "hunit-rematch" , "hurdle" , "husky" , "huzzy" , "hVOIDP" , "hws" , "HXMPP" , "hxmppc" , "hxournal" , "HXQ" , "hxt-binary" , "hxt-filter" , "hxthelper" , "hxweb" , "hybrid" , "hydra-hs" , "hydrogen-util" , "hyena" , "hylolib" , "hylotab" , "hyloutils" , "hyperdrive" , "hyperpublic" , "ideas" , "ideas-math" , "ide-backend" , "idiii" , "idna2008" , "IDynamic" , "ieee-utils" , "iException" , "ig" , "ige-mac-integration" , "igraph" , "ihaskell-magic" , "ihttp" , "illuminate" , "imagepaste" , "imbib" , "imgurder" , "imparse" , "ImperativeHaskell" , "implicit" , "INblobs" , "inch" , "increments" , "indices" , "infer-upstream" , "infinity" , "InfixApplicative" , "inflections" , "inflist" , "informative" , "instant-zipper" , "integer-pure" , "intel-aes" , "interleavableGen" , "interleavableIO" , "internetmarke" , "interpolatedstring-qq" , "interpolatedstring-qq-mwotton" , "intricacy" , "IOR" , "io-reactive" , "IORefCAS" , "ipatch" , "ipc" , "ipopt-hs" , "iptables-helpers" , "iptadmin" , "ircbouncer" , "IrrHaskell" , "ismtp" , "iteratee" , "iteratee-compress" , "iteratee-parsec" , "iteratee-stm" , "iterIO" , "iterio-server" , "iter-stats" , "ivar-simple" , "ivor" , "ivory" , "ivory-backend-c" , "ivory-bitdata" , "ivory-examples" , "ivory-hw" , "ivory-opts" , "ivory-quickcheck" , "ivory-stdlib" , "ixdopp" , "iyql" , "j2hs" , "jack-bindings" , "jackminimix" , "JackMiniMix" , "jalla" , "javasf" , "Javasf" , "javav" , "Javav" , "jespresso" , "jobqueue" , "join" , "jonathanscard" , "jort" , "jsaddle" , "jsaddle-hello" , "jsc" , "JsContracts" , "jsmw" , "json2" , "json2-hdbc" , "json-b" , "JSONb" , "JSON-Combinator" , "JSON-Combinator-Examples" , "json-tools" , "jspath" , "judy" , "JunkDB-driver-gdbm" , "kangaroo" , "kansas-lava" , "kansas-lava-cores" , "kansas-lava-papilio" , "kansas-lava-shake" , "keiretsu" , "Ketchup" , "kevin" , "kibro" , "kicad-data" , "kickass-torrents-dump-parser" , "KiCS" , "KiCS-debugger" , "KiCS-prophecy" , "kif-parser" , "kit" , "kmeans-par" , "knots" , "koellner-phonetic" , "Konf" , "korfu" , "kqueue" , "kure-your-boilerplate" , "KyotoCabinet" , "labeled-graph" , "labyrinth" , "labyrinth-server" , "lambdabot-utils" , "lambda-bridge" , "lambdacat" , "lambdacube" , "lambdacube-bullet" , "lambdacube-engine" , "lambdacube-examples" , "lambda-devs" , "lambdaFeed" , "LambdaPrettyQuote" , "LambdaShell" , "lambda-toolbox" , "lambdatwit" , "lambdiff" , "lame-tester" , "language-boogie" , "language-c-comments" , "language-eiffel" , "language-go" , "language-java-classfile" , "language-puppet" , "language-python-colour" , "language-sh" , "language-spelling" , "language-sqlite" , "Lastik" , "lat" , "latest-npm-version" , "layers" , "layers-game" , "layout" , "layout-bootstrap" , "lazyarray" , "l-bfgs-b" , "ldif" , "leaky" , "learn-physics-examples" , "leksah" , "Level0" , "leveldb-haskell-fork" , "levmar" , "levmar-chart" , "lgtk" , "LibClang" , "libcspm" , "libexpect" , "libGenI" , "libhbb" , "libjenkins" , "libltdl" , "liboleg" , "libpq" , "libssh2-conduit" , "libsystemd-daemon" , "libvirt-hs" , "libxml" , "libxslt" , "lifter" , "lighttpd-conf" , "lighttpd-conf-qq" , "limp" , "limp-cbc" , "linear-algebra-cblas" , "linear-maps" , "LinearSplit" , "LinkChecker" , "linkchk" , "linkcore" , "linux-blkid" , "linux-kmod" , "linux-ptrace" , "lio-eci11" , "lio-simple" , "listlike-instances" , "literals" , "live-sequencer" , "ll-picosat" , "llsd" , "llvm-analysis" , "llvm-data-interop" , "llvm-general" , "llvm-general-pure" , "llvm-general-quote" , "llvm-ht" , "llvm-tools" , "lmdb" , "loch" , "log-effect" , "logger" , "logic-classes" , "LogicGrowsOnTrees" , "LogicGrowsOnTrees-MPI" , "LogicGrowsOnTrees-network" , "LogicGrowsOnTrees-processes" , "lojban" , "loli" , "loopy" , "lord" , "loris" , "lostcities" , "lscabal" , "LslPlus" , "lsystem" , "luachunk" , "lucienne" , "Lucu" , "lui" , "luka" , "lvish" , "lye" , "mage" , "magic" , "MagicHaskeller" , "mahoro" , "mailchimp-subscribe" , "majordomo" , "manatee" , "manatee-anything" , "manatee-browser" , "manatee-core" , "manatee-curl" , "manatee-editor" , "manatee-filemanager" , "manatee-imageviewer" , "manatee-mplayer" , "manatee-pdfviewer" , "manatee-processmanager" , "manatee-reader" , "manatee-template" , "manatee-terminal" , "manatee-welcome" , "mandulia" , "mangopay" , "marionetta" , "markdown2svg" , "markdown-kate" , "markdown-pap" , "markov-processes" , "markup-preview" , "marxup" , "masakazu-bot" , "mathblog" , "mathlink" , "matlab" , "matsuri" , "maxent" , "maxsharing" , "maybench" , "MaybeT-monads-tf" , "mbox-tools" , "MC-Fold-DP" , "mcmc-samplers" , "Measure" , "mecab" , "mediawiki" , "mediawiki2latex" , "mega-sdist" , "melody" , "memo-sqlite" , "metadata" , "MetaObject" , "meta-par-accelerate" , "metaplug" , "metric" , "metrics" , "Metrics" , "metronome" , "Mhailist" , "midisurface" , "mighttpd" , "minesweeper" , "MiniAgda" , "miniball" , "minimung" , "miniplex" , "minirotate" , "ministg" , "mirror-tweet" , "MissingPy" , "missing-py2" , "mix-arrows" , "mkbndl" , "mlist" , "mmtl" , "mmtl-base" , "moan" , "modsplit" , "modular-prelude-classy" , "module-management" , "mohws" , "monad-abort-fd" , "monadacme" , "monad-bool" , "MonadCatchIO-mtl-foreign" , "MonadCatchIO-transformers-foreign" , "monad-exception" , "monadiccp" , "monadiccp-gecode" , "monad-interleave" , "MonadLab" , "monad-lrs" , "monad-open" , "monad-peel" , "monad-ran" , "monarch" , "Monaris" , "mongodb-queue" , "mongrel2-handler" , "Monocle" , "monoidplus" , "monte-carlo" , "moo" , "morfeusz" , "mount" , "mp3decoder" , "mpdmate" , "mprover" , "mps" , "mpvguihs" , "msgpack-idl" , "msgpack-rpc" , "mstate" , "mtgoxapi" , "mtl-tf" , "mtlx" , "mtp" , "mudbath" , "multifocal" , "multipass" , "multiplate-simplified" , "multirec-alt-deriver" , "multirec-binary" , "multisetrewrite" , "murder" , "musicbrainz-email" , "music-graphics" , "music-parts" , "music-pitch" , "music-preludes" , "music-sibelius" , "music-suite" , "musicxml" , "mutable-iter" , "mvclient" , "mybitcoin-sci" , "mysnapsession" , "mysnapsession-example" , "mysql-simple-typed" , "myTestlll" , "mzv" , "named-lock" , "nanoAgda" , "nano-cryptr" , "nanocurses" , "nano-hmac" , "nano-md5" , "narc" , "natural-number" , "nerf" , "nero" , "netcore" , "netlines" , "NetSNMP" , "netspec" , "nettle-frp" , "nettle-netkit" , "nettle-openflow" , "network-address" , "network-anonymous-i2p" , "network-builder" , "network-bytestring" , "network-connection" , "network-minihttp" , "Network-NineP" , "network-rpca" , "network-server" , "network-simple-sockaddr" , "network-simple-tls" , "network-topic-models" , "network-websocket" , "newports" , "newsynth" , "newt" , "NGrams" , "nibblestring" , "nikepub" , "Ninjas" , "nitro" , "nixos-types" , "nkjp" , "nm" , "nme" , "noise" , "Nomyx-Rules" , "NonEmptyList" , "NoSlow" , "not-gloss-examples" , "notmuch-haskell" , "notmuch-web" , "np-linear" , "nthable" , "null-canvas" , "numerals-base" , "numeric-qq" , "nums" , "Nussinov78" , "NXT" , "NXTDSL" , "oberon0" , "obj" , "ObjectIO" , "octopus" , "oculus" , "OGL" , "ohloh-hs" , "ois-input-manager" , "omaketex" , "Omega" , "omnicodec" , "on-a-horse" , "onu-course" , "OpenCL" , "OpenCLRaw" , "opencv-raw" , "openexchangerates" , "OpenGLCheck" , "opengles" , "openid" , "open-pandoc" , "openpgp-Crypto" , "openpgp-crypto-api" , "opentheory" , "opentheory-char" , "opentheory-parser" , "opentheory-prime" , "opentheory-primitive" , "open-union" , "OpenVG" , "OpenVGRaw" , "open-witness" , "Operads" , "optimusprime" , "orchestrate" , "orchid" , "orchid-demo" , "orgmode-parse" , "OSM" , "osm-download" , "ot" , "package-vt" , "packedstring" , "PageIO" , "panda" , "PandocAgda" , "pandoc-unlit" , "papillon" , "paragon" , "Paraiso" , "parameterized-data" , "parco" , "parco-attoparsec" , "parconc-examples" , "parco-parsec" , "parse-help" , "parsely" , "parser-helper" , "partial-lens" , "partly" , "pastis" , "pasty" , "Pathfinder" , "pathfindingcore" , "patterns" , "paypal-api" , "pb" , "pdynload" , "peakachu" , "pec" , "penny" , "penny-bin" , "penny-lib" , "peparser" , "perdure" , "PerfectHash" , "perm" , "permute" , "PermuteEffects" , "persistent-hssqlppp" , "persistent-map" , "persistent-protobuf" , "persistent-refs" , "persistent-vector" , "pesca" , "peyotls" , "pez" , "phasechange" , "phone-push" , "phooey" , "photoname" , "phraskell" , "phybin" , "pianola" , "pi-calculus" , "picologic" , "piet" , "piki" , "Pipe" , "pipes-cereal-plus" , "pipes-conduit" , "pipes-network-tls" , "pipes-p2p" , "pipes-p2p-examples" , "pisigma" , "pit" , "pkggraph" , "plailude" , "plivo" , "PlslTools" , "plugins-auto" , "png-file" , "pngload" , "pngload-fixed" , "pointless-lenses" , "pointless-rewrite" , "polh-lexicon" , "polyseq" , "polytypeable" , "polytypeable-utils" , "pontarius-mediaserver" , "pontarius-xmpp" , "pontarius-xpmn" , "pool" , "pool-conduit" , "popenhs" , "ports" , "positive" , "posix-acl" , "posix-pty" , "posix-waitpid" , "PostgreSQL" , "postgresql-simple-typed" , "postgresql-typed" , "postmaster" , "powermate" , "pqc" , "pqueue-mtl" , "practice-room" , "precis" , "prefork" , "press" , "primula-board" , "primula-bot" , "Printf-TH" , "PriorityChansConverger" , "priority-queue" , "ProbabilityMonads" , "process-iterio" , "process-leksah" , "process-progress" , "process-qq" , "procrastinating-structure" , "procrastinating-variable" , "procstat" , "prof2dot" , "profunctor-extras" , "progress" , "progressbar" , "progression" , "progressive" , "proj4-hs-bindings" , "prolog-graph" , "prolog-graph-lib" , "propane" , "Proper" , "proplang" , "protobuf-native" , "prove-everywhere-server" , "proxy-kindness" , "pub" , "publicsuffixlistcreate" , "pubsub" , "Pugs" , "pugs-compat" , "pugs-DrIFT" , "pugs-hsregex" , "pugs-HsSyck" , "pulse-simple" , "punkt" , "Pup-Events" , "Pup-Events-Demo" , "puppetresources" , "pushme" , "push-notify" , "push-notify-ccs" , "push-notify-general" , "putlenses" , "puzzle-draw" , "puzzle-draw-cmdline" , "pvd" , "qd" , "qd-vec" , "qhull-simple" , "qudb" , "querystring-pickle" , "queuelike" , "QuickAnnotate" , "QuickCheck-GenT" , "quickcheck-poly" , "quickcheck-regex" , "quickcheck-relaxng" , "quickcheck-rematch" , "quickset" , "quicktest" , "radium" , "radium-formula-parser" , "rail-compiler-editor" , "Raincat" , "rakhana" , "rallod" , "RandomDotOrg" , "random-eff" , "random-hypergeometric" , "random-stream" , "range" , "rangemin" , "range-space" , "Ranka" , "Rasenschach" , "raven-haskell-scotty" , "rbr" , "rdf4h" , "rdioh" , "reactive" , "reactive-bacon" , "reactive-balsa" , "reactive-banana-sdl" , "reactive-banana-threepenny" , "reactive-fieldtrip" , "reactive-glut" , "reactive-thread" , "reactor" , "really-simple-xml-parser" , "records-th" , "redHandlers" , "ref" , "Ref" , "refh" , "reflection-extras" , "reform-hsp" , "regex-deriv" , "regex-dfa" , "regex-genex" , "regex-parsec" , "regex-pderiv" , "regexp-tries" , "regexqq" , "regex-tre" , "regex-xmlschema" , "regional-pointers" , "regions" , "regions-monadsfd" , "regions-monadstf" , "regions-mtl" , "regular-extras" , "regular-web" , "reheat" , "reify" , "relational-postgresql8" , "relational-query" , "relational-query-HDBC" , "relational-record" , "relational-record-examples" , "relational-schemas" , "remotion" , "reorderable" , "repa-bytestring" , "repa-fftw" , "repa-plugin" , "repa-series" , "repa-v4l2" , "repl" , "repr" , "representable-functors" , "representable-profunctors" , "representable-tries" , "request-monad" , "resource-simple" , "respond" , "restful-snap" , "RESTng" , "restricted-workers" , "rethinkdb-client-driver" , "ReviewBoard" , "rewrite" , "rezoom" , "rfc3339" , "riot" , "ripple" , "ripple-federation" , "risc386" , "RJson" , "rmonad" , "RMP" , "RNAdesign" , "RNAFold" , "RNAFoldProgs" , "RNAwolf" , "rocksdb-haskell" , "roguestar-engine" , "roguestar-gl" , "roguestar-glut" , "RollingDirectory" , "rosa" , "roshask" , "rosso" , "rounding" , "roundtrip-xml" , "route-generator" , "route-planning" , "rowrecord" , "rpc" , "rpc-framework" , "rpm" , "rsagl" , "rsagl-frp" , "rsagl-math" , "rss2irc" , "rtlsdr" , "rubberband" , "ruler-core" , "rungekutta" , "safe-access" , "safe-freeze" , "safe-globals" , "safeint" , "safe-lazy-io" , "safe-plugins" , "safer-file-handles" , "safer-file-handles-bytestring" , "safer-file-handles-text" , "Salsa" , "salvia" , "salvia-demo" , "salvia-extras" , "salvia-protocol" , "salvia-sessions" , "salvia-websocket" , "samtools-iteratee" , "sasl" , "sat" , "satchmo-backends" , "satchmo-examples" , "satchmo-funsat" , "satchmo-minisat" , "sat-micro-hs" , "SBench" , "scan-vector-machine" , "scat" , "scenegraph" , "scgi" , "scion" , "scope" , "scope-cairo" , "scotty-blaze" , "scotty-fay" , "scrabble-bot" , "ScratchFs" , "scrz" , "Scurry" , "SDL" , "sdl2-image" , "sdl2-ttf" , "SDL2-ttf" , "SDL-gfx" , "SDL-image" , "SDL-mixer" , "SDL-mpeg" , "SDL-ttf" , "seacat" , "secdh" , "secret-santa" , "secret-sharing" , "secrm" , "sednaDBXML" , "selectors" , "selenium" , "selenium-server" , "selinux" , "Semantique" , "semigroupoid-extras" , "semigroups-actions" , "sensenet" , "sentry" , "senza" , "seqaid" , "seqloc-datafiles" , "serf" , "servant-pool" , "servant-postgresql" , "servant-scotty" , "servius" , "SessionLogger" , "sessions" , "sexpr" , "SFML" , "SFML-control" , "SFont" , "SG" , "SGdemo" , "sgf" , "shady-gen" , "shady-graphics" , "shake-extras" , "shaker" , "shakespeare-css" , "shakespeare-i18n" , "shapely-data" , "shared-buffer" , "she" , "Shellac-compatline" , "Shellac-editline" , "shell-pipe" , "shelly-extra" , "shivers-cfg" , "showdown" , "sifflet" , "sifflet-lib" , "signals" , "simd" , "simgi" , "simple" , "simple-bluetooth" , "simple-css" , "simple-c-value" , "simple-firewire" , "SimpleGL" , "SimpleH" , "simpleirc" , "simpleirc-lens" , "simple-log-syslog" , "simplenote" , "simple-postgresql-orm" , "simpleprelude" , "simple-session" , "simple-sessions" , "simplessh" , "simple-templates" , "simple-vec3" , "simseq" , "sindre" , "sirkel" , "skype4hs" , "smallarray" , "smallpt-hs" , "smallstring" , "smartGroup" , "smartword" , "Smooth" , "smt-lib" , "smtp2mta" , "snap-accept" , "snap-app" , "snap-elm" , "snap-extras" , "snaplet-actionlog" , "snaplet-auth-acid" , "snaplet-environments" , "snaplet-hdbc" , "snaplet-i18n" , "snaplet-mongoDB" , "snaplet-mongodb-minimalistic" , "snaplet-oauth" , "snaplet-redson" , "snaplet-rest" , "snaplet-sedna" , "snaplet-tasks" , "snappy-iteratee" , "snap-utils" , "sndfile-enumerators" , "SNet" , "snm" , "snow-white" , "Snusmumrik" , "SoccerFun" , "SoccerFunGL" , "sock2stream" , "socketio" , "sonic-visualiser" , "sorted" , "sound-collage" , "source-code-server" , "SourceGraph" , "sousit" , "soxlib" , "soyuz" , "SpacePrivateers" , "sparse" , "sparsebit" , "spata" , "special-functors" , "specialize-th" , "species" , "speculation-transformers" , "sphero" , "sphinx-cli" , "spike" , "splines" , "split-record" , "splitter" , "Spock-auth" , "spoonutil" , "Sprig" , "sqlite-simple-typed" , "sql-simple" , "sql-simple-mysql" , "sql-simple-pool" , "sql-simple-postgresql" , "sql-simple-sqlite" , "sql-words" , "squeeze" , "srcinst" , "ssh" , "sssp" , "sstable" , "stackage-curator" , "standalone-haddock" , "starrover2" , "statgrab" , "statistics-dirichlet" , "statistics-fusion" , "stb-truetype" , "stepwise" , "stm-chunked-queues" , "stmcontrol" , "stm-firehose" , "stm-io-hooks" , "Stomp" , "storable-static-array" , "storablevector" , "storablevector-carray" , "storablevector-streamfusion" , "Strafunski-Sdf2Haskell" , "StrappedTemplates" , "streamed" , "StrictBench" , "strict-concurrency" , "string" , "stringlike" , "stripe-haskell" , "structural-induction" , "structured-mongoDB" , "stunts" , "suitable" , "sunroof-compiler" , "sunroof-examples" , "sunroof-server" , "supercollider-midi" , "superdoc" , "supero" , "svg2q" , "SVG2Q" , "svm-simple" , "swagger" , "swapper" , "swf" , "syb-extras" , "sylvia" , "sym-plot" , "sync" , "synchronous-channels" , "SyntaxMacros" , "syntax-pretty" , "syntax-trees" , "synthesizer" , "synthesizer-alsa" , "synthesizer-core" , "synthesizer-dimensional" , "synthesizer-midi" , "Sysmon" , "system-lifted" , "system-random-effect" , "ta" , "tableaux" , "Tables" , "tablestorage" , "tabloid" , "tagged-list" , "tagged-th" , "tagsoup-ht" , "Takusen" , "takusen-oracle" , "tamarin-prover" , "tamarin-prover-term" , "tamarin-prover-theory" , "tamarin-prover-utils" , "target" , "task" , "tasty-integrate" , "TBC" , "TBit" , "tbox" , "tccli" , "tdd-util" , "TeaHS" , "teams" , "template-haskell_2_10_0_0" , "template-hsml" , "term-rewriting" , "terrahs" , "test-framework-doctest" , "testloop" , "testpattern" , "testPkg" , "testrunner" , "tetris" , "text-ldap" , "textmatetags" , "text-normal" , "textPlot" , "texts" , "text-show-instances" , "text-xml-generic" , "text-xml-qq" , "themoviedb" , "themplate" , "Theora" , "theoremquest-client" , "thimk" , "Thingie" , "th-instances" , "th-kinds" , "thrift" , "Thrift" , "throttle" , "tianbar" , "tic-tac-toe" , "tidal" , "tidal-vis" , "tiger" , "tighttp" , "timberc" , "time-extras" , "time-http" , "timeout" , "timeout-control" , "TimePiece" , "time-w3c" , "TinyURL" , "Titim" , "tkhs" , "tkyprof" , "tls-extra" , "to-haskell" , "toilet" , "toktok" , "tokyocabinet-haskell" , "topkata" , "torch" , "to-string-class" , "to-string-instances" , "Tournament" , "tracker" , "trajectory" , "transactional-events" , "transformers-convert" , "transformers-runnable" , "translate" , "traypoweroff" , "treemap-html-tools" , "treeviz" , "TrendGraph" , "trhsx" , "triangulation" , "TrieMap" , "tsession" , "tsession-happstack" , "tsp-viz" , "tuntap" , "tupleinstances" , "twentefp-rosetree" , "twhs" , "twidge" , "twilight-stm" , "twill" , "twiml" , "twine" , "twisty" , "twitch" , "twitter-conduit" , "twitter-enumerator" , "twitter-feed" , "twitter-types" , "twitter-types-lens" , "tx" , "TYB" , "typalyze" , "typeable-th" , "type-cereal" , "TypeClass" , "type-digits" , "typedquery" , "type-equality-check" , "typehash" , "TypeIlluminator" , "type-level" , "type-level-sets" , "typelevel-tensor" , "type-ord" , "type-ord-spine-cereal" , "typeparams" , "type-prelude" , "type-settheory" , "type-spine" , "type-structure" , "type-sub-th" , "uAgda" , "uconv" , "udev" , "uhttpc" , "UMM" , "unamb-custom" , "unbounded-delays-units" , "unboxed-containers" , "unfoldable" , "unicode-normalization" , "uniqueid" , "unique-logic-tf" , "unittyped" , "universe-th" , "unix-process-conduit" , "unlit" , "unordered-containers-rematch" , "unpack-funcs" , "unscramble" , "uploadcare" , "upskirt" , "ureader" , "urembed" , "uri-bytestring" , "uri-conduit" , "uri-enumerator" , "uri-enumerator-file" , "urlcheck" , "urldecode" , "UrlDisp" , "urldisp-happstack" , "urlencoded" , "URLT" , "urxml" , "usb-enumerator" , "usb-iteratee" , "usb-safe" , "uvector" , "uvector-algorithms" , "v4l2" , "v4l2-examples" , "vacuum-cairo" , "vacuum-opengl" , "validate" , "vampire" , "var" , "Vec-Boolean" , "Vec-OpenGLRaw" , "vector-bytestring" , "vector-conduit" , "vector-fftw" , "vector-functorlazy" , "vector-random" , "vector-read-instances" , "vector-static" , "Vec-Transform" , "verilog" , "vigilance" , "vintage-basic" , "vinyl-json" , "virthualenv" , "vision" , "visual-graphrewrite" , "visual-prof" , "VKHS" , "vowpal-utils" , "voyeur" , "vtegtk3" , "vty-examples" , "vty-menu" , "vty-ui-extras" , "wai-eventsource" , "wai-frontend-monadcgi" , "wai-graceful" , "wai-handler-devel" , "wai-handler-snap" , "wai-handler-webkit" , "wai-hastache" , "wai-hmac-auth" , "wai-lite" , "wai-logger-prefork" , "wai-middleware-cache" , "wai-middleware-cache-redis" , "wai-middleware-catch" , "wai-middleware-consul" , "wai-middleware-etag" , "wai-middleware-headers" , "wai-middleware-route" , "wai-routes" , "wai-session-tokyocabinet" , "wai-throttler" , "warp-dynamic" , "warp-tls-uid" , "WashNGo" , "wavesurfer" , "weather-api" , "WebBits-Html" , "WebBits-multiplate" , "web-browser-in-haskell" , "WebCont" , "webcrank" , "webdriver-snoy" , "webify" , "webkit" , "webkit-javascriptcore" , "web-mongrel2" , "Webrexp" , "web-routes-quasi" , "web-routes-transformers" , "websnap" , "webwire" , "weighted-regexp" , "welshy" , "Wheb" , "wheb-mongo" , "wheb-redis" , "wheb-strapped" , "WikimediaParser" , "wikipedia4epub" , "Win32" , "Win32-dhcp-server" , "Win32-errors" , "Win32-extras" , "Win32-junction-point" , "Win32-notify" , "Win32-security" , "Win32-services" , "Win32-services-wrapper" , "windowslive" , "winerror" , "winio" , "WL500gPControl" , "wl-pprint-terminfo" , "wobsurv" , "woffex" , "word24" , "wordcloud" , "wordsearch" , "wp-archivebot" , "wraxml" , "wright" , "wtk" , "wtk-gtk" , "wumpus-basic" , "wumpus-drawing" , "wumpus-microprint" , "wumpus-tree" , "WURFL" , "wxAsteroids" , "WXDiffCtrl" , "wxFruit" , "wxhnotepad" , "wxturtle" , "wyvern" , "X11-extras" , "X11-rm" , "X11-xdamage" , "X11-xfixes" , "x11-xinput" , "xchat-plugin" , "x-dsp" , "Xec" , "xfconf" , "xhaskell-library" , "xine" , "xing-api" , "XInput" , "xkbcommon" , "xkcd" , "xlsior" , "xlsx-templater" , "xml2json" , "xml2x" , "xml-catalog" , "xml-enumerator" , "xml-enumerator-combinators" , "XmlHtmlWriter" , "xml-parsec" , "xml-pipe" , "xml-prettify" , "xml-push" , "xmltv" , "XMMS" , "xmms2-client" , "xmms2-client-glib" , "xmonad-contrib-bluetilebranch" , "xmonad-eval" , "xmpipe" , "XMPP" , "xournal-convert" , "xournal-render" , "xsact" , "XSaiga" , "xslt" , "Yablog" , "YACPong" , "yahoo-web-search" , "yajl" , "yajl-enumerator" , "yaml2owl" , "YamlReference" , "yaml-rpc-scotty" , "yaml-rpc-snap" , "yampa-glfw" , "ycextra" , "yesod-auth-ldap" , "yesod-auth-pam" , "yesod-auth-smbclient" , "yesod-comments" , "yesod-continuations" , "yesod-datatables" , "yesod-dsl" , "yesod-eventsource" , "yesod-examples" , "yesod-goodies" , "yesod-mangopay" , "yesod-paginate" , "yesod-pagination" , "yesod-paginator" , "yesod-platform" , "yesod-pure" , "yesod-rst" , "yesod-s3" , "yesod-session-redis" , "yesod-static-angular" , "yesod-tableview" , "yesod-test-json" , "yesod-vend" , "yesod-worker" , "YFrob" , "yhccore" , "yi-gtk" , "yi-vty" , "yjftp" , "Yogurt" , "Yogurt-Standalone" , "yoko" , "york-lava" , "yql" , "yuuko" , "zasni-gerna" , "zendesk-api" , "zeno" , "zeromq3-conduit" , "zeromq3-haskell" , "zeromq-haskell" , "zeroth" , "ZMachine" , "zmcat" , "zmqat" , "zoneinfo" , "zoom" , "zoom-cache" , "zoom-cache-pcm" , "zoom-cache-sndfile" , "zsh-battery" , "Zwaluw" ] }