<div dir="ltr">Re 2 for rank-2, there is already precedent for using 2 for lifting over two arguments, so semantic confusion sadly remains: <div><br></div><div>E.g.<div><br></div><div>Eq2 p means Eq a, Eq b => Eq (p a b)</div><div><br></div><div>or</div><div><br></div><div>Eq2 p means Eq a => Eq1 (p a)</div></div><div><br></div><div>-Edward</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Oct 1, 2016 at 11:08 AM, Mario Blažević <span dir="ltr"><<a href="mailto:blamario@ciktel.net" target="_blank">blamario@ciktel.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 2016-10-01 04:07 AM, Edward Kmett wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I'm somewhat weakly against these, simply because they haven't seen broad adoption in the wild in any of the attempts to introduce them elsewhere, and they don't quite fit the naming convention of the other Foo1 classes in Data.Functor.Classes<br>
<br>
Eq1 f says more or less that Eq a => Eq (f a).<br>
<br>
Semigroup1 in your proposal makes a stronger claim. Semgiroup1 f  is saying forall a. (f a) is a semigroup parametrically. Both of these constructions could be useful, but they ARE different constructions.<br>
</blockquote>
<br></span>
    The standard fully parametric classes like Functor and Monad have no suffix at all. It makes sense to reserve the suffix "1" for non-parametric lifting classes. Can you suggest a different naming scheme for parametric classes of a higher order?<br>
<br>
    I'm also guilty of abusing the suffix "1", at least provisionally, but these are different beasts yet again:<br>
<br>
  -- | Equivalent of 'Functor' for rank 2 data types<br>
  class Functor1 g where<br>
  fmap1 :: (forall a. p a -> q a) -> g p -> g q<br>
<br>
<a href="https://github.com/blamario/grampa/blob/master/Text/Grampa/Classes.hs" rel="noreferrer" target="_blank">https://github.com/blamario/gr<wbr>ampa/blob/master/Text/Grampa/<wbr>Classes.hs</a><br>
<br>
    What would be a proper suffix here? I guess Functor2 would make sense, for a rank-2 type?<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
<br>
If folks had actually been using, say, the Plus and Alt classes from semigroupoids or the like more or less at all pretty much anywhere, I could maybe argue towards bringing them up towards base, but I've seen almost zero adoption of the ideas over multiple years -- and these represent yet _another_ point in the design space where we talk about semigroupal and monoidal structures where f is a Functor instead. =/<br>
<br>
Many points in the design space, and little demonstrated will for adoption seems to steers me to think that the community isn't ready to pick one and enshrine it some place central yet.<br>
<br>
Overall, -1.<br>
<br>
-Edward<br>
<br></span><span class="">
On Fri, Sep 30, 2016 at 7:25 PM, David Feuer <<a href="mailto:david.feuer@gmail.com" target="_blank">david.feuer@gmail.com</a> <mailto:<a href="mailto:david.feuer@gmail.com" target="_blank">david.feuer@gmail.com</a>><wbr>> wrote:<br>
<br>
    I've been playing around with the idea of writing Haskell 2010<br>
    type classes for finite sequences and non-empty sequences,<br>
    somewhat similar to Michael Snoyman's Sequence class in<br>
    mono-traversable. These are naturally based on Monoid1 and<br>
    Semigroup1, which I think belong in base.<br>
<br>
    class Semigroup1 f where<br>
      (<<>>) :: f a -> f a -> f a<br>
    class Semigroup1 f => Monoid1 f where<br>
      mempty1 :: f a<br>
<br>
    Then I can write<br>
<br>
    class (Monoid1 t, Traversable t) => Sequence t where<br>
      singleton :: a -> t a<br>
      -- and other less-critical methods<br>
<br>
    class (Semigroup1 t, Traversable1 t) => NESequence where<br>
      singleton1 :: a -> t a<br>
      -- etc.<br>
<br>
    I can, of course, just write my own, but I don't think I'm the<br>
    only one using such.<br>
<br>
<br>
    ______________________________<wbr>_________________<br>
    Libraries mailing list<br></span>
    <a href="mailto:Libraries@haskell.org" target="_blank">Libraries@haskell.org</a> <mailto:<a href="mailto:Libraries@haskell.org" target="_blank">Libraries@haskell.org</a>><br>
    <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bi<wbr>n/mailman/listinfo/libraries</a><br>
    <<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-b<wbr>in/mailman/listinfo/libraries</a>><span class=""><br>
<br>
<br>
<br>
<br>
______________________________<wbr>_________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org" target="_blank">Libraries@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bi<wbr>n/mailman/listinfo/libraries</a><br>
</span></blockquote><div class="HOEnZb"><div class="h5">
<br>
<br>
______________________________<wbr>_________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org" target="_blank">Libraries@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bi<wbr>n/mailman/listinfo/libraries</a><br>
</div></div></blockquote></div><br></div>