We went round and round on this back in August.

The ultimate decision was to leave the existing behavior for quot and div
as sufficient consensus for changing it was not reached.

I've updated the ticket in question to reflect that resolution.

-Edward

On Mon, Jun 1, 2015 at 6:40 PM, Nikita Karetnikov <nik...@karetnikov.org>
wrote:

> According to the documentation, rem and mod must satisfy the following
> laws:
>
>     -- > (x `quot` y)*y + (x `rem` y) == x
>     rem
>
>     -- > (x `div` y)*y + (x `mod` y) == x
>     mod
>
> https://hackage.haskell.org/package/base-4.8.0.0/docs/src/GHC-Real.html
>
> Note, however, that there is a case when quot and div result in an
> arithmetic overflow:
>
> Prelude> (minBound :: Int) `quot` (-1)
> *** Exception: arithmetic overflow
> Prelude> (minBound :: Int) `div` (-1)
> *** Exception: arithmetic overflow
>
> while rem and mod don't:
>
> Prelude> (minBound :: Int) `rem` (-1)
> 0
> Prelude> (minBound :: Int) `mod` (-1)
> 0
>
> Is this a mistake?
>
> For the record, I'm aware of the safeint package, which raises the error
> for rem and mod, and this ticket:
>
> https://ghc.haskell.org/trac/ghc/ticket/8695
> _______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users@haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users
>
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users

Reply via email to