
On 24/04/2012 11:08, Erik Hesselink wrote:
On Tue, Apr 24, 2012 at 10:55, Michael Snoyman
wrote: On Tue, Apr 24, 2012 at 11:36 AM, Erik Hesselink
wrote: On Tue, Apr 24, 2012 at 08:32, Michael Snoyman
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.
No, Michael is right. The library writer would need to provide fromString :: String -> Q Exp since there's no way to take an aribtrary value and convert it into something we can compile. Cheers, Simon