cborg-0.2.8.0 fails to build with 32bit ghc9
Here are the errors with ghc-9.2 for Fedora 38 i686:
[ 4 of 14] Compiling Codec.CBOR.Decoding
src/Codec/CBOR/Decoding.hs:426:62: error:
• Couldn't match expected type ‘Word#’ with actual type ‘Word64#’
• In the first argument of ‘toWord64’, namely ‘w64#’
In the first argument of ‘k’, namely ‘(toWord64 w64#)’
In the expression: k (toWord64 w64#)
|
426 | Decoder (\k -> return (ConsumeWord64 (\w64# -> k (toWord64 w64#))))
| ^^^^
src/Codec/CBOR/Decoding.hs:445:65: error:
• Couldn't match expected type ‘Word#’ with actual type ‘Word64#’
• In the first argument of ‘toWord64’, namely ‘w64#’
In the first argument of ‘k’, namely ‘(toWord64 w64#)’
In the expression: k (toWord64 w64#)
|
445 | Decoder (\k -> return (ConsumeNegWord64 (\w64# -> k (toWord64 w64#))))
| ^^^^
src/Codec/CBOR/Decoding.hs:485:60: error:
• Couldn't match expected type ‘Int#’ with actual type ‘Int64#’
• In the first argument of ‘toInt64’, namely ‘n64#’
In the first argument of ‘k’, namely ‘(toInt64 n64#)’
In the expression: k (toInt64 n64#)
|
485 | Decoder (\k -> return (ConsumeInt64 (\n64# -> k (toInt64 n64#))))
| ^^^^
src/Codec/CBOR/Decoding.hs:525:71: error:
• Couldn't match expected type ‘Word#’ with actual type ‘Word64#’
• In the first argument of ‘toWord64’, namely ‘w64#’
In the first argument of ‘k’, namely ‘(toWord64 w64#)’
In the expression: k (toWord64 w64#)
|
525 | Decoder (\k -> return (ConsumeWord64Canonical (\w64# -> k (toWord64 w64#))))
| ^^^^
src/Codec/CBOR/Decoding.hs:544:74: error:
• Couldn't match expected type ‘Word#’ with actual type ‘Word64#’
• In the first argument of ‘toWord64’, namely ‘w64#’
In the first argument of ‘k’, namely ‘(toWord64 w64#)’
In the expression: k (toWord64 w64#)
|
544 | Decoder (\k -> return (ConsumeNegWord64Canonical (\w64# -> k (toWord64 w64#))))
| ^^^^
src/Codec/CBOR/Decoding.hs:584:69: error:
• Couldn't match expected type ‘Int#’ with actual type ‘Int64#’
• In the first argument of ‘toInt64’, namely ‘n64#’
In the first argument of ‘k’, namely ‘(toInt64 n64#)’
In the expression: k (toInt64 n64#)
|
584 | Decoder (\k -> return (ConsumeInt64Canonical (\n64# -> k (toInt64 n64#))))
| ^^^^
[ 5 of 14] Compiling Codec.CBOR.Encoding[boot]
[ 6 of 14] Compiling Codec.CBOR.FlatTerm[boot]
[ 7 of 14] Compiling Codec.CBOR.Encoding
[ 8 of 14] Compiling Codec.CBOR.Magic
src/Codec/CBOR/Magic.hs:176:43: error:
• Couldn't match expected type ‘Word64#’ with actual type ‘Word#’
• In the first argument of ‘byteSwap64#’, namely
‘(word64ToWord# (indexWord64OffAddr# ip# 0#))’
In the first argument of ‘W64#’, namely
‘(byteSwap64# (word64ToWord# (indexWord64OffAddr# ip# 0#)))’
In the expression:
W64# (byteSwap64# (word64ToWord# (indexWord64OffAddr# ip# 0#)))
|
176 | grabWord64 (Ptr ip#) = W64# (byteSwap64# (word64ToWord# (indexWord64OffAddr# ip# 0#)))
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/Codec/CBOR/Magic.hs:487:17: error:
• Couldn't match expected type ‘Word#’ with actual type ‘Word32#’
• In the first argument of ‘ltWord#’, namely ‘w#’
In the first argument of ‘isTrue#’, namely
‘(w# `ltWord#` 0x80000000##)’
In the expression: isTrue# (w# `ltWord#` 0x80000000##)
|
487 | case isTrue# (w# `ltWord#` 0x80000000##) of
| ^^
src/Codec/CBOR/Magic.hs:533:56: error:
• Couldn't match expected type ‘Word#’ with actual type ‘Word8#’
• In the first argument of ‘word2Int#’, namely ‘w#’
In the first argument of ‘intToInt64#’, namely ‘(word2Int# w#)’
In the first argument of ‘I64#’, namely
‘(intToInt64# (word2Int# w#))’
|
533 | word8ToInt64 (W8# w#) = I64# (intToInt64# (word2Int# w#))
| ^^
src/Codec/CBOR/Magic.hs:534:56: error:
• Couldn't match expected type ‘Word#’ with actual type ‘Word16#’
• In the first argument of ‘word2Int#’, namely ‘w#’
In the first argument of ‘intToInt64#’, namely ‘(word2Int# w#)’
In the first argument of ‘I64#’, namely
‘(intToInt64# (word2Int# w#))’
|
534 | word16ToInt64 (W16# w#) = I64# (intToInt64# (word2Int# w#))
| ^^
src/Codec/CBOR/Magic.hs:535:63: error:
• Couldn't match expected type ‘Word#’ with actual type ‘Word32#’
• In the first argument of ‘wordToWord64#’, namely ‘w#’
In the first argument of ‘word64ToInt64#’, namely
‘(wordToWord64# w#)’
In the first argument of ‘I64#’, namely
‘(word64ToInt64# (wordToWord64# w#))’
|
535 | word32ToInt64 (W32# w#) = I64# (word64ToInt64# (wordToWord64# w#))
| ^^
src/Codec/CBOR/Magic.hs:541:48: error:
• Couldn't match expected type ‘Word#’ with actual type ‘Word8#’
• In the first argument of ‘wordToWord64#’, namely ‘w#’
In the first argument of ‘W64#’, namely ‘(wordToWord64# w#)’
In the expression: W64# (wordToWord64# w#)
|
541 | word8ToWord64 (W8# w#) = W64# (wordToWord64# w#)
| ^^
src/Codec/CBOR/Magic.hs:542:48: error:
• Couldn't match expected type ‘Word#’ with actual type ‘Word16#’
• In the first argument of ‘wordToWord64#’, namely ‘w#’
In the first argument of ‘W64#’, namely ‘(wordToWord64# w#)’
In the expression: W64# (wordToWord64# w#)
|
542 | word16ToWord64 (W16# w#) = W64# (wordToWord64# w#)
| ^^
src/Codec/CBOR/Magic.hs:543:48: error:
• Couldn't match expected type ‘Word#’ with actual type ‘Word32#’
• In the first argument of ‘wordToWord64#’, namely ‘w#’
In the first argument of ‘W64#’, namely ‘(wordToWord64# w#)’
In the expression: W64# (wordToWord64# w#)
|
543 | word32ToWord64 (W32# w#) = W64# (wordToWord64# w#)
| ^^
It builds fine on 64bit archs
This probably supercedes #293
Oddly, we're getting a very similar failure, but on aarch64-darwin with GHC 9.4.4:
[ 5 of 14] Compiling Codec.CBOR.Magic ( src/Codec/CBOR/Magic.hs, dist/build/Codec/CBOR/Magic.o, dist/build/Codec/CBOR/Magic.dyn_o )
src/Codec/CBOR/Magic.hs:260:20: error:
• Couldn't match expected type ‘Word64#’ with actual type ‘Word#’
• In the first argument of ‘W64#’, namely ‘(toWord w#)’
In the expression: W64# (toWord w#)
In an equation for ‘w64’: w64 w# = W64# (toWord w#)
|
260 | w64 w# = W64# (toWord w#)
| ^^^^^^^^^
edit: Possibly addressed in #304 and/or #307, pardon the noise.
This would still be great to be fixed. #322 seems to allow compilation and the test suite passes, but haven't been able to review the change in detail yet.
Hopefully fixed in https://github.com/well-typed/cborg/pull/351
Can confirm that it compiles fine and the test suite passes with i686-linux and GHC 9.10.2.