That has n :: Integer, not n :: a, right?<div><br /></div><div><br /></div>@Douglas: <div><br /></div>What about the ring of polynomials over the integers, i.e. Z[X]? We can certainly define a Num instance for that if we set 'signum _ = 1' and 'abs = id'. 'fromInteger' then injects constant polynomials.<div><br /></div><div><br /></div>However, if 'n' is X + 1, then n*(n+1) is X^2 + 3X + 2; what's that divided by 2? Not well-defined, since we were talking about polynomials over the integers.<div><br /></div><div><br /></div>If your function is to have type Num a => a -> a, it will need to handle this case, but I don't see a way in which it can.<div><br /></div><div><br /></div>- Tom<div><br /></div><div><br /></div>P.S. Unless, of course, you allow extra typeclasses; other posters have already suggested (inefficient) versions for Ord and Enum.<div><br /></div><div><br /></div><div><br /></div>-------- Original Message --------<div><br /></div>On 16 Dec 2020, 23:13, Jaro Reinders < jaro.reinders@gmail.com> wrote:<div><br /></div>Num alone is enough: sum [1..n] = sum (map fromInteger [1..n])<div><br /></div>On 12/16/20 11:07 PM, MigMit wrote:<div><br /></div>> Num + Enum would be enough though, since n*(n+1)/2 = sum [1..n], n*(n+1)*(n+2)/6 = sum (map (\m -> sum [1..m]) [1..n]) etc. Not quite effective, of course.<div><br /></div>><div><br /></div>>> On 16 Dec 2020, at 22:57, David Feuer <david.feuer@gmail.com> wrote:<div><br /></div>>><div><br /></div>>> I very much doubt that Num a is sufficient. That's not even enough to check whether a number is even. You can certainly perform the calculation with `Integral a`, but you'll have to apply some external reasoning to see that the result is correct.<div><br /></div>>><div><br /></div>>> On Wed, Dec 16, 2020, 4:45 PM M Douglas McIlroy <m.douglas.mcilroy@dartmouth.edu> wrote:<div><br /></div>>> Some nominally rational functions, e.g n*(n+1)/2,<div><br /></div>>> yield integer values for integer arguments. I seek<div><br /></div>>> either a way to wrap such a function so it has type<div><br /></div>>> Num a => a->a or a convincing argument that it can't<div><br /></div>>> be done.<div><br /></div>>><div><br /></div>>> Doug<div><br /></div>>> _______________________________________________<div><br /></div>>> Haskell-Cafe mailing list<div><br /></div>>> To (un)subscribe, modify options or view archives go to:<div><br /></div>>> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><div><br /></div>>> Only members subscribed via the mailman list are allowed to post.<div><br /></div>>> _______________________________________________<div><br /></div>>> Haskell-Cafe mailing list<div><br /></div>>> To (un)subscribe, modify options or view archives go to:<div><br /></div>>> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><div><br /></div>>> Only members subscribed via the mailman list are allowed to post.<div><br /></div>><div><br /></div>> _______________________________________________<div><br /></div>> Haskell-Cafe mailing list<div><br /></div>> To (un)subscribe, modify options or view archives go to:<div><br /></div>> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><div><br /></div>> Only members subscribed via the mailman list are allowed to post.<div><br /></div>><div><br /></div>_______________________________________________<div><br /></div>Haskell-Cafe mailing list<div><br /></div>To (un)subscribe, modify options or view archives go to:<div><br /></div><a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><div><br /></div>Only members subscribed via the mailman list are allowed to post.<div><br /></div>