default instance for IsString

Michael Snoyman michael at
Tue Apr 24 15:11:55 CEST 2012

On Tue, Apr 24, 2012 at 1:08 PM, Erik Hesselink <hesselink at> wrote:
> On Tue, Apr 24, 2012 at 10:55, Michael Snoyman <michael at> wrote:
>> On Tue, Apr 24, 2012 at 11:36 AM, Erik Hesselink <hesselink at> wrote:
>>> On Tue, Apr 24, 2012 at 08:32, Michael Snoyman <michael at> wrote:
>>>> Here's a theoretically simple solution to the problem. How about
>>>> adding a new method to the IsString typeclass:
>>>>    isValidString :: String -> Bool
>>> If you're going with this approach, why not evaluate the conversion
>>> from String immediately? For either case you have to know the
>>> monomorphic type, and converting at compile time is more efficient as
>>> well. But we're getting pretty close to Template Haskell here.
>> I could be mistaken, but I think that would be much harder to
>> implement at the GHC level. GHC would then be responsible for taking a
>> compile-time value and having it available at runtime (i.e., lifting
>> in TH parlance). Of course, I'm no expert on GHC at all, so if someone
>> who actually knows what they're talking about says that this concern
>> is baseless, I agree that your approach is better.
> But GHC already has all the infrastructure for this, right? You can do
> exactly this with TH.
> Erik

Yes, absolutely. The issue is that TH can be too heavy for both the
library author and user:

* For the author, you now have to deal with generating some `Q Exp`
instead of just producing your data with normal Haskell code.
* For the user, you need to replace "foo" with [qqname|foo|].

There's also quite a bit of TH hatred out there, but I'm definitely
not in that camp. Nonetheless, I *do* think it would be nice to avoid
TH in this case if possible.


More information about the Glasgow-haskell-users mailing list