Ошибка сборки пакета на Haskell

Я создал песочницу cabal и пытаюсь собрать пакет hakyll Haskell на моем OSX, но я получаю ошибку сборки на временном пакете 1.2.0.2. В чем может быть причина?
Кабал версия 1.20
Ошибка сборки ниже:

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

1 ответ

Решение

Это связано с ошибкой в ​​"временном" пакете: https://github.com/batterseapower/temporary/pull/12

Из-за того, что сопровождающий не отвечает, не было обновлений к временному при взломе, и кто-то в настоящее время создал временный ветвь rc.

Из того, что я могу сказать, "временная" зависимость от pandoc и pandoc-citeproc. Я смог установить hakyll, выполнив следующее, что довольно хакерски, но сработало для меня и не требует загрузки и изменения нескольких пакетов для использования "временного-rc" вместо "временного".

  1. Загрузите временный rc во временную папку через cabal get temporary-rc
  2. Отредактируйте временный-rc.cabal и измените поле "имя:" (первая строка) с "временный-rc" на "временный"
  3. Я использую песочницы, так что если вы cabal sandbox add-source <path/to/temporary-rc> (временная папка rc в вашей временной директории с последнего шага)
    • Если вы не используете песочницы, я думаю, вы можете просто сделать cabal install из папки временного rc, чтобы установить его в свой пакет пользователя-db. Я не проверял это.
  4. Установите hakyll как обычно, и он должен подобрать исправленный "временный" пакет.

Если вы хотите следовать по домам, в библиотеках haskell обсуждается ситуация.

Другие вопросы по тегам