<div dir="auto">I am opposed to all the hate on Foldable ((,) a). For one thing, it's the parent of the perfectly good Traversable ((,) a) instance. For another, typeclasses should be defined for every type which has a valid and sensical instance, so people don't run into "Why isn't this defined?" and having to write orphan instances for it.<div dir="auto"><br></div><div dir="auto">For another, it just feels like the majority of it is directed at "length ('a', 1)" returning 1 instead of 2. But does anyone expect "foldr (+) 0 ('a', 1)" to return "'a'+1+0" as if that were even a thing? People don't seem to have a problem with the Functor instance for ((,) a) only mapping over the second value, and the Applicative and Monad instances treat the first argument entirely differently from the second.</div><div dir="auto"><br></div><div dir="auto">It's a failure of expectations more than anything else, and I really don't think anyone beyond beginner level is routinely running into bugs because they tried to use length or toList on a tuple.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, May 29, 2020, 09:10 Richard Eisenberg <<a href="mailto:rae@richarde.dev" target="_blank" rel="noreferrer">rae@richarde.dev</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
<br>
> On May 29, 2020, at 4:47 AM, Ben Gamari <<a href="mailto:ben@smart-cactus.org" rel="noreferrer noreferrer" target="_blank">ben@smart-cactus.org</a>> wrote:<br>
>> <br>
>> <a href="https://gitlab.haskell.org/ghc/ghc/issues/11796" rel="noreferrer noreferrer noreferrer" target="_blank">https://gitlab.haskell.org/ghc/ghc/issues/11796</a><br>
>> <br>
> Indeed. All we need is someone to implement. Admittedly, I don't have<br>
> much insight into how difficult this would be. Richard or Simon<br>
> would likely be more helpful in this regard.<br>
<br>
Implementation should be quite easy. The challenge is in the design. The design in the ticket looks plausible, but you would have to start by making a GHC proposal.<br>
>> <br>
>> Interesting idea. Or would it be better implemented in a type-checker <br>
>> plugin?<br>
>> <br>
> That would be another approach but I don't believe this is possible with<br>
> our current typechecker plugin mechanism.. <br>
<br>
I agree with everything Ben said here. We look to plugins only after GHC has failed internally. Maybe that's not the best design, but it's what we have.<br>
<br>
Richard<br>
_______________________________________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org" rel="noreferrer noreferrer" target="_blank">Libraries@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
</blockquote></div>