PROPOSAL: Add 'Natural' type to base:Data.Word

David Feuer david.feuer at gmail.com
Thu Nov 13 17:29:04 UTC 2014


Yes,  you're right of course.
On Nov 13, 2014 12:06 PM, "Andreas Abel" <andreas.abel at ifi.lmu.de> wrote:

> On 13.11.2014 17:24, David Feuer wrote:
>
>> Another approach is to ask "which is larger, and by how much?" to which
>> the answer is Either the Left or the Right.
>>
>
> Yes, but one would have to have three outcomes:  the Left is larger by n,
> the Right is larger by n, or they are Equal.  Otherwise the result for
> equal nats is a bit arbitrary.  (See Conor McBride's Compare type family.)
>
>   compare m n = LT k  ==>  m+k+1 = n
>   compare m n = EQ    ==>  m = n
>   compare m n = GT k  ==>  m = n+k+1
>
>>
>> On Nov 13, 2014 11:22 AM, "Daniel Díaz" <dhelta.diaz at gmail.com
>> <mailto:dhelta.diaz at gmail.com>> wrote:
>>
>>     I am +1 on having Natural in base, I don't really mind the place
>>     (although I also admit that Data.Word seems odd to me).
>>
>>     About subtraction. For the Num instance of Natural, I'd prefer (x -
>>     y) where (y > x) to fail with an error call. This is
>>     consistent with the behavior we already have for division. The type
>>     `(-):: Natural ->Natural -> Natural` forces us to return
>>     a value for any pair of naturals. However, subtraction is not
>>     defined for every pair, so it makes sense to me for the function
>>     to be partial.
>>
>>     That being said, I consider myself an enemy of partial functions
>>     (head, tail, and family), and I'd probably prefer to use subtraction
>>     with the following type:
>>
>>     safeSubtract :: Natural -> Natural -> Maybe Natural
>>
>>     With this type, we are not forced to return a value for every pair,
>>     returning Nothing instead for those cases where subtraction does not
>>     make
>>     sense. This is, IMHO, the best way to subtract naturals.
>>
>>     Best regards,
>>     Daniel Díaz.
>>
>>     On 11/13/2014 01:03 AM, Sean Leather wrote:
>>
>>>     Iavor laid out the options nicely, so I'm building off of his
>>>     response.
>>>
>>>     On Wed, Nov 12, 2014 at 9:16 PM, Iavor Diatchki wrote:
>>>
>>>         1. I like the idea of having a `Natual` type similar to
>>>         `Integer`, so +1 from me.
>>>
>>>
>>>     A definite +1 from me, too.
>>>
>>>         2. I am a bit worried about the partiality of some of the
>>>         operations, but I don't see an appealing alternative... I
>>>         guess we should just throw some informative exceptions.
>>>
>>>
>>>     I agree, but see my response to John Lato below.
>>>
>>>         3. I don't mind where it lives, although `Data.Word` does seem
>>>         a little odd.
>>>
>>>
>>>     Agreed with this, too, but I'm not sure of a better place. Would
>>>     it be worth exporting Integer from Data.Int to have symmetry? Or
>>>     is that silly?
>>>
>>>     On Thu, Nov 13, 2014 at 2:51 AM, John Lato wrote:
>>>
>>>         +0.9 for saturated subtraction.
>>>         Playing devil's advocate, the downside is that if a user
>>>         forgets to check the subtraction preconditions, saturated
>>>         subtraction will silently give the wrong answer instead of
>>>         calling error.  So for a (relatively common?) mistake, the
>>>         consequences will be worse (exceptions are better than wrong
>>>         values).
>>>
>>>         However, this is balanced by several use cases for which
>>>         saturated subtraction is the desired behavior. Furthermore
>>>         there's no existing code to break, so now is the time to make
>>>         this choice (it would be easier to go to a partial function in
>>>         the future than vice versa).
>>>
>>>
>>>     I'm not sure how it would be “easier to go to a partial function”
>>>     if your code expects saturation.
>>>
>>>     Here's another option: Provide total (or partial) functions by
>>>     default in the Num and other instances, and provide supplementary
>>>     partial (total) functions for those who want the other semantics.
>>>
>>>     Regards,
>>>     Sean
>>>
>>>
>>>     _______________________________________________
>>>     Libraries mailing list
>>>     Libraries at haskell.org  <mailto:Libraries at haskell.org>
>>>     http://www.haskell.org/mailman/listinfo/libraries
>>>
>>
>>
>>     _______________________________________________
>>     Libraries mailing list
>>     Libraries at haskell.org <mailto:Libraries at haskell.org>
>>     http://www.haskell.org/mailman/listinfo/libraries
>>
>>
>>
>> _______________________________________________
>> Libraries mailing list
>> Libraries at haskell.org
>> http://www.haskell.org/mailman/listinfo/libraries
>>
>>
>
> --
> Andreas Abel  <><      Du bist der geliebte Mensch.
>
> Department of Computer Science and Engineering
> Chalmers and Gothenburg University, Sweden
>
> andreas.abel at gu.se
> http://www2.tcs.ifi.lmu.de/~abel/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20141113/28559b06/attachment.html>


More information about the Libraries mailing list