nbt
nbt copied to clipboard
nbt-0.7 is not compiling (use of 'fail' in Data/NBT.hs)
I am trying to compile nbt-0.7 with ghc 8.8.3 (stac lts-16.1) and get the following error:
Preprocessing library for nbt-0.7..
nbt > Building library for nbt-0.7..
nbt > [1 of 1] Compiling Data.NBT
nbt >
nbt > /tmp/stack-d638f12c11d32bcc/nbt-0.7/src/Data/NBT.hs:113:53: error:
nbt > • No instance for (MonadFail Data.Serialize.Put.PutM)
nbt > arising from a use of ‘fail’
nbt > • In the expression: fail "Attempted to write heterogeneous list"
nbt > In a case alternative:
nbt > x : xs
nbt > | all (\ e -> typeOf e == ty) xs -> return ty
nbt > | otherwise -> fail "Attempted to write heterogeneous list"
nbt > where
nbt > ty = typeOf x
nbt > In a stmt of a 'do' block:
nbt > ty <- case elems ts of
nbt > [] -> return EndType
nbt > x : xs
nbt > | all (\ e -> typeOf e == ty) xs -> return ty
nbt > | otherwise -> fail "Attempted to write heterogeneous list"
nbt > where
nbt > ty = typeOf x
nbt > |
nbt > 113 | | otherwise -> fail "Attempted to write heterogeneous list"
nbt > | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
nbt >
I tracked the problem down and fount that the new version of GHC has dropped the fail function for Monads. See the proposal. A suiting fix would be replacing fail
with error
as that was the default behaviour of the PutM
monad instance.
Thank you! I will try to take a look this weekend.
There are two uses of fail
in that file. The one in the Get
monad should be ok, since there is a MonadFail Get
instance. But the Put
one needs to be changed to error.
I can submit a pull request, but it is just a one-liner, plus version bump.
If you add me as a maintainer here and on hackage, I can upload a new version. I maintain this library,
https://github.com/stepcut/minecraft-data
And it currently does not build on anything higher than GHC 8.6 due to nbt
not building.
Any chance of this being resolved? I don't have any particular rush (I had just wanted to play with NBT and noticed a package already existed, and so looked here and noticed it had an error) but this seems like a fairly small issue to just allow to be a showstopper.