Re: Correct parsers for bounded integral values
Pierre Thierry <[email protected]> Mon, 21 Jul 2025 18:33:22 +0200
| Newsgroups | gmane.comp.lang.haskell.cafe |
|---|---|
| Message-ID | <[email protected]> |
Le 21/07/2025 à 17:42, Stefan Klinger a écrit : > x = 123456 > is equivalent to > x = fromInteger (read "123456" :: Integer) It's basically what happens internally. You can see the convertInt <https://hackage.haskell.org/package/ghc-internal-9.1201.0/docs/src/GHC.Internal.Read.html#convertInt> function and it's used a few lines beneath in the Read Int instance. convertInt :: Num a => L.Lexeme -> ReadPrec a convertInt (L.Number n) | Just i <- L.numberToInteger n = return (fromInteger i) > But there is a *different* read function > > read :: String -> Word8 > > which is not used in the scenario above, and this is the buggy one > (and all its bounded cousins). Well, IIUC, it conforms to the Haskell 98 specification. In that sense, it's not buggy. But the specification may be sound and counter-intuitive (which is not an uncommon combination…). Curiously, Pierre Thierry -- [email protected] 0xD9D50D8A _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
OpenPGP_0xC5ED7720D9D50D8A.asc
(application/pgp-keys, 10.3 KB)
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 QtUKAJ9kZsjY7DiDNlxCrEkDYjVpYvRvQcJTBBARAgALBQI6gImGBAsDAgEAEgkQ xe13INnVDYoHZUdQRwABAcmpAJ9fTwFzRn1KHcGVEZeu869gGkLVCgCfZGbI2Ow4 gzZcQqxJA2I1aWL0b0HNJFBpZXJyZSBUaGllcnJ5IDxwdGhpZXJyeUBza3JlZWwu b3JnPsJGBDARAgAGBQI8bI07AAoJEMXtdyDZ1Q2KixEAoPvp7aLc1njkN2ZBh5Va weCFS7tYAKCQSk8RWEz0IIDRw0qQu7l0BuKG5cJTBBARAgALBQI6gIloBAsDAgEA EgkQxe13INnVDYoHZUdQRwABAWLLAJ9iw9yOnB39zDjEgF1aEowUO8xkTACfQ8oJ WFYWX45twH8fDKwm7gr0E4rCUwQQEQIACwUCOoCJaAQLAwIBABIJEMXtdyDZ1Q2K B2VHUEcAAQFiywCfYsPcjpwd/cw4xIBdWhKMFDvMZEwAn0PKCVhWFl+ObcB/Hwys Ju4K9BOKzSZsZSBNb2luZSBGb3UgPHB0aGllcnJ5QG11bHRpbWFuaWEuY29tPsJG BDARAgAGBQI8bI0bAAoJEMXtdyDZ1Q2Kt80AnRUi4Rg7Yt9saKMk80O6Of9jgD62 AKCsS5xvV6JV0U4XQhBfhxy6RHRMM8JTBBARAgALBQI6XxtyBAsDAgEAEgkQxe13 INnVDYoHZUdQRwABAdJvAJ0fLvR+NxBRpduFPvUvtpYYEsiBiwCgjOJ9cxi4wBqJ E2bF1Kaz+43v4lvCUwQQEQIACwUCOl8bcgQLAwIBABIJEMXtdyDZ1Q2KB2VHUEcA AQHSbwCdHy70fjcQUaXbhT71L7aWGBLIgYsAoIzifXMYuMAaiRNmxdSms/uN7+Jb zSdQaWVycmUgVGhpZXJyeSA8cGllcnJlLnRoaWVycnlAbm9vcy5mcj7CRgQwEQIA BgUCPGyNCgAKCRDF7Xcg2dUNignXAKD9E/OEbIimpD0c7O7i/yimDkXfcwCfW67E fXvGz3N2MbqCR6jcIahGHx/CUwQQEQIACwUCOl2w2AQLAwIBABIJEMXtdyDZ1Q2K B2VHUEcAAQFTVQCgp/iOxS5M8E3Jb0heDNm4JFdvRQQAoPzUn9u/I0M3lVzz20o2 bwc27KINwlMEEBECAAsFAjpdsNgECwMCAQASCRDF7Xcg2dUNigdlR1BHAAEBU1UA oKf4jsUuTPBNyW9IXgzZuCRXb0UEAKD81J/bvyNDN5Vc89tKNm8HNuyiDc0oUGll cnJlIFRoaWVycnkgPHBpZXJyZS50aGllcnJ5QGFmdWwub3JnPsJJBDARAgAJBQJP 1RKVAh0gAAoJEMXtdyDZ1Q2KdXcAn1jo2NHfSPudROCkm2tiMfxukqL3AKC915Gy KFoC7/WVVvyOOCWO4akVqcJcBBMRAgAcBQI+3kY/AhsDBAsHAwIDFQIDAxYCAQIe AQIXgAAKCRDF7Xcg2dUNiiaiAJ9vhHaj7qfnH0UXaMxRDG2sDHm8twCfZBnRhnbb m1qwx1T9IOJFSrozKlTCYAQTEQIAIAIbAwIeAQIXgAUCRJkgSQYLCQgHAwIEFQII AwQWAgMBAAoJEMXtdyDZ1Q2KM+8AniWO2y9+6uVa2MNItga93pHsd6wTAJ9h34sC Gh1HP4zm7i8kYHyUGPN1p8JgBBMRAgAgAhsDAh4BAheABQJI5VhhBgsJCAcDAgQV AggDBBYCAwEACgkQxe13INnVDYo3cQCgweIv67JyMmMb3j3xOA+FuoxwEb4AnAre 8FUh5dQxsOFe2xe+kathwCe1zSlQaWVycmUgVGhpZXJyeSA8cGllcnJlLnRoaWVy cnlAZmZqZHIub3JnPsJJBDARAgAJBQJP1RKYAh0gAAoJEMXtdyDZ1Q2KgXQAoPTB SuPadV5ZRiL9WUZBF5jQ2KjKAKCZq5kzSHVqfV9Fcmo13L8O4Tmi1cJcBBMRAgAc BQI+3kYlAhsDBAsHAwIDFQIDAxYCAQIeAQIXgAAKCRDF7Xcg2dUNitDSAJ0YB0kP Vu6SsmUR7cjKxgx4unYxSwCg/riJN7j8kELrlnxS9UNoO7aminrCYAQTEQIAIAIb AwIeAQIXgAUCRJkgSQYLCQgHAwIEFQIIAwQWAgMBAAoJEMXtdyDZ1Q2KHyUAoPnT OGw1nB7JKFIg1tpspnH6MyOyAJ40NpyJrFZj1N91Ksw16erye3ftHsJgBBMRAgAg AhsDAh4BAheABQJI5VhhBgsJCAcDAgQVAggDBBYCAwEACgkQxe13INnVDYo9TgCg 80mUL7C0zbaORzRxEBRn9r9IBvAAmwZCUNlwzZgyaz/wpxDFB6NypD5RzSpQaWVy cmUgVGhpZXJyeSA8cGllcnJlLnRoaWVycnlAd2FuYWRvby5mcj7CRgQwEQIABgUC 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 LrwVhmCktc3AmA== =5Tvd -----END PGP PUBLIC KEY BLOCK-----
OpenPGP_signature.asc
(application/pgp-signature, 203 B)
-----BEGIN PGP SIGNATURE----- wmMEABEIACMWIQT5t6oMDaHvAeSVxeLF7Xcg2dUNigUCaH5r0gUDAAAAAAAKCRDF7Xcg2dUNipWH AJ9m+RPYhdz9T89ogL/LXupljAbOKQCdHRUaz/VLeV2zZW8NktqCIB6QpNE= =ETgh -----END PGP SIGNATURE-----