Proposal: Add IsString instance for (Maybe a) to base

Roman Cheplyaka roma at ro-che.info
Fri Jul 12 08:04:13 CEST 2013


Because what IsString essentially does is it adds implicit conversions.

Implicit conversions make code harder to understand. They also lead to
all sorts of WATs. (See the famous presentation.)

We can already make Perlish things like

  instance IsString Int where fromString = length

I think we need some rules telling us what is or is not okay.

To be clear, people should be able to declare whatever instances they
think are reasonable in their code. But it's a different matter to make
this effectively part of the language.

Roman

* John Lato <jwlato at gmail.com> [2013-07-12 08:19:05+0800]
> To play devil's advocate, why?
> 
> What does limiting IsString in this fashion gain anyone?  It doesn't
> complicate type inference any more than it already is.  For any
> applicative, there's the trivial instance
> 
> instance (IsString a, Applicative t) => IsString (t a) where
>     fromString = pure . fromString
> 
> which is conceptually a very simple step and is always total.
> 
> Of course some functors admit other instances.  I think some parser
> libraries already provide IsString instances as a nice syntax on matching
> string literals.  A rule like this would invalidate those instances for no
> particularly good reason I can see.
> 
> 
> On Fri, Jul 12, 2013 at 4:22 AM, Sjoerd Visscher <sjoerd at w3future.com>wrote:
> 
> > Could this be formalised by saying that there should be a function
> > toString such that
> >
> >   fromString . toString = id
> >
> > There's no such toString for "Maybe a" with fromString = Just.
> >
> > Sjoerd
> >
> > On Jul 10, 2013, at 4:02 PM, David Luposchainsky <
> > dluposchainsky at googlemail.com> wrote:
> >
> > > On 2013-07-10 15:55, Joachim Breitner wrote:
> > >> Hi,
> > >>
> > >> Am Mittwoch, den 10.07.2013, 09:21 +1000 schrieb Ivan Lazar Miljenovic:
> > >>> -0.5 from me; I think it's too easy to forget that it's a Maybe value
> > >>> there when refactoring, etc.
> > >>
> > >> same here; even with OverloadedStrings Haskell should feel as strongly
> > >> typed as it is.
> > >
> > > Agreed. Overloaded strings should be reserved for things that *are*
> > > strings in a certain way. A "Maybe String" is not a special way of
> > > storing a string (like for example a "Vector Char"), it's a String with
> > > an additional value. Providing a Maybe instance goes too far in the
> > > direction of having a general "'return' with strings" function, so I'm
> > > -1 on this.
> > >
> > > David
> > >
> > >
> > > _______________________________________________
> > > Libraries mailing list
> > > Libraries at haskell.org
> > > http://www.haskell.org/mailman/listinfo/libraries
> >
> >
> > _______________________________________________
> > Libraries mailing list
> > Libraries at haskell.org
> > http://www.haskell.org/mailman/listinfo/libraries
> >

> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries




More information about the Libraries mailing list