Tony Morris tonymorris at gmail.com
Wed May 3 08:32:31 UTC 2017

```It's Foldable for ((,) a).

It is not Foldable for any of these things:

* (,)
* tuples
* pairs

In fact, to talk about a Foldable for (,) or "tuples" is itself a kind
error. There is no good English name for the type constructor ((,) a)
which I suspect, along with being unfamiliar with utilising the
practical purpose of types (and types of types) is the root cause of all
the confusion in this discussion.

Ask yourself what the length of this value is:

[[1,2,3], [4,5,6]]

[(1, 'a'), (undefined, 77)]

Is it 4? No, obviously not, which we can determine by:

:kind Foldable :: (* -> *) -> Constraint
:kind [] :: * -> *

Therefore, there is no possible way that the Foldable instance for []
can inspect the elements (and determine that they are pairs in this
case). By this method, we conclude that the length of the value is 2. It
cannot be anything else, some assumptions about length itself put aside.

By this ubiquitous and very practical method of reasoning, the length of
any ((,) a) is not only one, but very obviously so.

On 03/05/17 17:21, Jonathon Delgado wrote:
> I sent the following post to the Beginners list a couple of weeks ago (which failed to furnish an actual concrete example that answered the question). Upon request I'm reposting it to CafĂ©:
>
> I've seen many threads, including the one going on now, about why we need to have:
>
> length (2,3) = 1
> product (2,3) = 3
> sum (2,3) = 3
> or (True,False) = False
>
> but the justifications all go over my head. Is there a beginner-friendly explanation for why such seemingly unintuitive operations should be allowed by default?
> _______________________________________________
> To (un)subscribe, modify options or view archives go to:
> Only members subscribed via the mailman list are allowed to post.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature