# Strictness (was: Is this tail recursive?)

matt hellige matt@immute.net
Thu, 14 Mar 2002 16:29:59 -0600

```[Jay Cox <sqrtofone@yahoo.com>]
>
> (+):: Num a => a -> a -> a therefore sum :: Num a => [a] -> a -> a
> now, for any conceivable sum, you generally need both arguments to compute
> it (or am I wrong?), so i guess you could say (+) should probably be
> strict for both arguments.  But how would you tell the compiler that?
>
> oh wait.
> . o O 0  church numerals... peano numerals....
>
> data Peano = Zero | Succ (Peano)
>
> sumpeano blah (Succ x) = sumpeano (Succ blah) x
> sumpeano blah Zero     = blah
>
> sumpeano not strict on first argument.
> define instance Num for Peano.
>
> I dont even know if you could talk about strictness in either argument
> with church numerals. (and I'm to lazy to remind myself what a church
> numeral looks like precisely so that I could find out.)
>

i suppose this is getting a bit off-topic, but for any instance of Num
with an additive identity, (+) probably doesn't need to be strict for
both arguments, right? consider:
sum 0 x = x
sum x y = x + y

if the first argument is 0, we don't need to inspect the second
argument at all.

if i'm correct, this just reinforces your point...

m

--
matt hellige                  matt@immute.net
http://matt.immute.net

```