2014-05-09 3 views
3

J'ai créé un sandbox cabal et j'essaye de construire le paquet Haskell Haskell sur mon OSX mais je reçois une erreur de construction sur le paquetage temporaire 1.2.0.2. Quelle peut être la raison?
la version cabale est 1.20
erreur de construction est ci-dessous:Haskell erreur de construction du paquet

abcdef-MacBook-Pro:hakyll bd$ cabal install temporary 
Resolving dependencies... 
Configuring temporary-1.2.0.2... 
Building temporary-1.2.0.2... 
Preprocessing library temporary-1.2.0.2... 
[1 of 3] Compiling Distribution.Compat.Exception (Distribution/Compat/Exception.hs, dist/dist-sandbox-352cd149/build/Distribution/Compat/Exception.o) 
[2 of 3] Compiling Distribution.Compat.TempFile (Distribution/Compat/TempFile.hs, dist/dist-sandbox-352cd149/build/Distribution/Compat/TempFile.o) 
[3 of 3] Compiling System.IO.Temp (System/IO/Temp.hs, dist/dist-sandbox-352cd149/build/System/IO/Temp.o) 

System/IO/Temp.hs:59:3: 
    Could not deduce (MonadMask m) arising from a use of `bracket' 
    from the context (MonadIO m, MonadCatch m) 
     bound by the type signature for 
       withTempFile :: (MonadIO m, MonadCatch m) => 
           FilePath -> String -> (FilePath -> Handle -> m a) -> m a 
     at System/IO/Temp.hs:(53,17)-(57,19) 
    Possible fix: 
     add (MonadMask m) to the context of 
     the type signature for 
      withTempFile :: (MonadIO m, MonadCatch m) => 
          FilePath -> String -> (FilePath -> Handle -> m a) -> m a 
    In the expression: 
     bracket 
     (liftIO (openTempFile tmpDir template)) 
     (\ (name, handle) 
      -> liftIO (hClose handle >> ignoringIOErrors (removeFile name))) 
     (uncurry action) 
    In an equation for `withTempFile': 
     withTempFile tmpDir template action 
      = bracket 
       (liftIO (openTempFile tmpDir template)) 
       (\ (name, handle) 
       -> liftIO (hClose handle >> ignoringIOErrors (removeFile name))) 
       (uncurry action) 

System/IO/Temp.hs:79:3: 
    Could not deduce (MonadMask m) arising from a use of `bracket' 
    from the context (MonadCatch m, MonadIO m) 
     bound by the type signature for 
       withTempDirectory :: (MonadCatch m, MonadIO m) => 
             FilePath -> String -> (FilePath -> m a) -> m a 
     at System/IO/Temp.hs:(73,22)-(77,24) 
    Possible fix: 
     add (MonadMask m) to the context of 
     the type signature for 
      withTempDirectory :: (MonadCatch m, MonadIO m) => 
           FilePath -> String -> (FilePath -> m a) -> m a 
    In the expression: 
     bracket 
     (liftIO (createTempDirectory targetDir template)) 
     (liftIO . ignoringIOErrors . removeDirectoryRecursive) 
    In an equation for `withTempDirectory': 
     withTempDirectory targetDir template 
      = bracket 
       (liftIO (createTempDirectory targetDir template)) 
       (liftIO . ignoringIOErrors . removeDirectoryRecursive) 
Failed to install temporary-1.2.0.2 
cabal: Error: some packages failed to install: 
temporary-1.2.0.2 failed during the building phase. The exception was: 
ExitFailure 1 

Répondre

2

Cela est dû à un bogue dans le paquet « temporaire »: https://github.com/batterseapower/temporary/pull/12

En raison du mainteneur ne pas être réactif, il n'y a pas été une mise à jour temporaire sur le hackage, et quelqu'un a créé une fourchette temporary-rc pour le moment. D'après ce que je peux dire, la dépendance 'temporaire' vient de pandoc et de pandoc-citeproc. J'ai pu installer hakyll en faisant ce qui suit, qui est plutôt hacky mais qui fonctionne pour moi et ne nécessite pas de télécharger et de modifier un paquet de paquets pour utiliser 'temporary-rc' au lieu de 'temporary'.

  1. Télécharger temporaire rc dans un dossier temporaire via cabal get temporary-rc
  2. Edit-rc.cabal temporaire et changer le "nom:" champ (première ligne) de 'rc-temporaire' à 'temporaire'
  3. J'utilise des bacs à sable, donc si vous êtes, faites cabal sandbox add-source <path/to/temporary-rc> (le dossier temporaire rc dans votre répertoire temporaire de la dernière étape)
    • Si vous ne l'utilisez des bacs à sable, je suppose que vous pouvez juste faire un cabal install de la dossier temporaire-rc pour l'installer dans votre paquet utilisateur-db. Je n'ai pas testé ça.
  4. Installez hakyll normalement et il devrait ramasser le paquet 'temporaire' révisé.

Si vous voulez suivre chez vous, il y a un thread on haskell-libraries pour discuter de la situation.

+1

merci. En fait, si le propriétaire du paquet temporaire n'est pas réactif, alors les propriétaires de Hakyll devraient passer à temporaire-rc à la place .. – xyzt

+1

FYI cela a maintenant été corrigé dans 'temporary-1.2.0.3' - https://github.com/batterseapower/temporary/pull/12 # issuecomment-42769179 –

+1

Résolu ... Il est maintenant bien d'installer hakyll en utilisant cabal. – xyzt