@@ -6,6 +6,8 @@ import Cabal2Nix.Generate
66import Cabal2Nix.Name
77import Cabal2Nix.Package
88import Control.Monad.IfElse
9+import Control.Monad.Par.Combinator
10+import Control.Monad.Par.IO
911import Control.Monad.Reader
1012import Control.Monad.State.Strict hiding ( State )
1113import qualified Data.Map as Map
@@ -74,10 +76,13 @@ nixAttr name ver = toNixName name ++ "_" ++ [ if c == '.' then '_' else c | c <-
7476buildPackageSet :: Compile ()
7577buildPackageSet = do
7678 db <- asks _hackage
77− forM_ (Map.toList db) $ \(name, versions) -> do
78− let latestVersion = Set.findMax (Map.keysSet versions)
79− pkgDescription = (Map.!) versions latestVersion
80− srcSpec <- liftIO $ sourceFromHackage Nothing (name ++ "-" ++ display latestVersion)
81− let nixExpr = (cabal2nix pkgDescription) { src = srcSpec }
82− liftIO $ print $ hang (text (nixAttr name latestVersion) <+> equals) 2 (disp nixExpr) <> semi
83− fail "yo"
79+ pkgs <- liftIO $ runParIO $ parMapM generatePackage (Map.toList db)
80+ forM_ pkgs $ \(name, version, nixExpr) ->
81+ liftIO $ print $ hang (text (nixAttr name version) <+> equals) 2 (disp nixExpr) <> semi
82+
83+generatePackage :: (String, Map Version GenericPackageDescription) -> ParIO (String,Version,Derivation)
84+generatePackage (name, versions) = do
85+ let latestVersion = Set.findMax (Map.keysSet versions)
86+ pkgDescription = (Map.!) versions latestVersion
87+ srcSpec <- liftIO $ sourceFromHackage Nothing (name ++ "-" ++ display latestVersion)
88+ return (name, latestVersion, (cabal2nix pkgDescription) { src = srcSpec })