How can I keep my Haskell package in LTS without M

2019-06-09 12:11发布

问题:

Since GHC 8.6.1, MissingH is no longer included in Stackage LTS nightly, apparently because of incompatibilities between MissingH and Control.Monad.Fail.MonadFail. Specifically, if I try to build my package against an 8.6.1 resolver and manually add MissingH (from a current branch, since the Hackage version is rejected due to a constraint on base), I get:

/home/travis/build/orome/crypto-enigma-hs/.stack-work/downloaded/cfhWTjyPvK7n/src/Data/Compression/Inflate.hs:189:14: error:
    • No instance for (Control.Monad.Fail.MonadFail InfM)
        arising from a do statement
        with the failable pattern ‘[x]’
    • In a stmt of a 'do' block: [x] <- get_bits 1
      In the expression:
        do [x] <- get_bits 1
           return x
      In an equation for ‘get_bit’:
          get_bit
            = do [x] <- get_bits 1
                 return x
    |
189 | get_bit = do [x] <- get_bits 1
    |              ^^^^^^^^^^^^^^^^^

I'm unsure how to proceed. I expect that many packages have a dependency on MissingH and will get kicked out of LTS if it is not updated.

Are there alternatives to MissingH that I could use. Is MissingH actively maintained and should I expect it to get fixed soon?


I'm not sure what part of MissingH I'm using (how do I figure that out in Haskell?; I think Data.String.Utils, at least comes from there), but my imports (across all files) look like this:

import           Control.Arrow
import           Control.Exception      (assert)
import           Control.Monad          (unless)
import           Control.Monad.Except
import           Control.Monad.Zip
import           Control.Applicative
import           Data.Monoid
import           Data.List
import           Data.List.Split        (splitOn)
import qualified Data.Map               as M
import           Data.Maybe
import           Text.Printf            (printf)
import           Data.Char              (toUpper)
import           Data.String.Utils      (replace)

import Data.Char (chr, ord)
import Data.List (sort)

import Control.Applicative
import Data.Monoid
import Data.Char
import Data.List
import Data.List.Split          (chunksOf)
import Data.String.Utils        (replace)
import Text.Printf              (printf)

Is there a backward compatible substitute for the parts of MissingH that I'm using?