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

Evan Laforge qdunkan at gmail.com
Fri Jul 12 09:57:44 CEST 2013


On Fri, Jul 12, 2013 at 2:45 AM, John Lato <jwlato at gmail.com> wrote:
> On Fri, Jul 12, 2013 at 2:13 PM, Roman Cheplyaka <roma at ro-che.info> wrote:
>>
>> * John Lato <jwlato at gmail.com> [2013-07-12 13:56:31+0800]
>> > The programmer is being explicit; the type specifies the value is a
>> > Maybe.
>> >  If it weren't, the Just wouldn't be inserted.
>>
>> Not necessarily — take Simon's original example:
>>
>>   (shell "ls -l") { cwd = "/home/me" }
>>
>> If I didn't know the type of 'cwd', it would never occur to me while
>> reading this code that you can supply Nothing there.
>
> So?  If you're just reading the code, it doesn't matter.  If you want to

It does to me!  Concrete types help me read.  I have a lot of trouble
understanding libraries that make extensive use of typeclasses, both
reading their documentation and reading code that uses them.

> OverloadedStrings (and number literals) are already a mess for this.
> Currently, we have
>
>     (shell "ls -l") { cwd = Just "/home/me" }
>
> If I want to replace that literal with a value and I don't know the type of
> 'cwd', I already need to look it up.  Otherwise I might try to do something
> like this:
>
>     dirFromUser <- Text.getLine
>     (shell "ls -l") { cwd = Just dirFromUser }

I probably wouldn't, because I know the process package uses Strings.

In general though I agree, with overloading there's a bit of a mess,
but that's not license to expand the mess.

> A decent IDE helps a lot if you don't know the types of things in your code.
> Everyone should use one.

It sounds reasonable in theory, but I've never seen an IDE I would
call "decent".



More information about the Libraries mailing list