# Correct behaviour of Bounded (Down a)

Krzysztof Gogolewski krz.gogolewski at gmail.com
Mon Sep 21 17:09:09 UTC 2020

```I would consider removing Enum a => Enum (Down a), and fixing Bounded (Down a).

There isn't really a good equivalent of `enumFromThenTo` for Down and
performing negation in `toEnum` is not obvious to me.

On Sat, Sep 19, 2020 at 3:00 AM Kim-Ee Yeoh <ky3 at atamo.com> wrote:
>
>
>
> On Sat, Sep 19, 2020 at 1:34 AM Asad Saeeduddin <masaeedu at gmail.com> wrote:
>>
>> This is something I've never understood about `Enum`. How can a
>>
>> type be in bijection with the integers, but simultaneously have a
>>
>> minimum and maximum bound?
>
>
> It's not a bijection with the integers.
>
> In the method fromEnum :: a -> Int, the Int stands in for the disjoint sum of all possible types with an Enum instance.
>
> And the way Int finesses that impersonation is by conflating together the parts of the disjoint sum.
>
>>
>>
>>
>>
>>
>> On 9/18/20 10:40 AM, Oleg Grenrus
>>
>> wrote:
>>
>>
>>
>>
>>
>>
>>
>>
>> Is it (a bug)?
>>
>>
>>
>>
>>
>> What about [minBound .. maxBound]. If you change `Bounded`, you
>>
>> need to change `Enum` too.
>>
>>
>>
>>
>>
>> From
>>
>>
>>
>>
>>
>>
>> - The calls succ maxBound and pred minBound should result in a
>>
>> runtime error.
>>
>>
>> - enumFrom and enumFromThen should be defined with an implicit
>>
>> bound
>>
>>
>>
>> The `min` and `max` in `minBound/maxBound` are related to
>>
>> `succ`, `pred`, not to `compare`. If you argue against, then we
>>
>> should add `Ord` super-class to `Enum` (and `Bounded`).
>>
>>
>>
>>
>> - Oleg
>>
>>
>>
>>
>> On 18.9.2020 16.54, Carter Schonwald
>>
>> wrote:
>>
>>
>>
>>
>>
>>
>>
>>
>> Def a bug! Plz at myself and the core libraries
>>
>> handle for code review plz.
>>
>>
>>
>>
>>
>>
>>
>> This sounds kinda related to an MR that has
>>
>> languished too long regarding the behavior of Down on Ord1,
>>
>> which I think is related??? (I tried to arbitrate / layout
>>
>> possible answers for the related issue in the associated mr,
>>
>> but none of the clc members have engaged in the design space
>>
>> challenge)
>>
>>
>>
>>
>>
>>
>>
>> On Fri, Sep 18, 2020 at
>>
>> 7:44 AM David Beacham <mail at dbeacham.co.uk>
>>
>> wrote:
>>
>>
>>
>>
>>>
>>>
>>>
>>>
>>> Hi all,
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> The current instance for `Bounded a => Bounded
>>>
>>> (Down a)` derives the `minBound` and `maxBound`
>>>
>>> exactly as they are for the underlying type `a` where
>>>
>>> I think they should be flipped to respect the flipped
>>>
>>> ordering of `Down a`?
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> I have a feeling this has been come up in some
>>>
>>> other context/list before but I couldn't find a
>>>
>>> reference to it when searching - so sorry if this is a
>>>
>>> duplicate.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> I've got a corresponding MR here: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/4081
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> Thanks, David.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>>
>>>
>>>
>>>
>>>
>>> Libraries mailing list
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>>
>> Libraries mailing list
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>>
>> Libraries mailing list
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>>
>> Libraries mailing list
>>