This sounds rather similar to C++'s constexpr functions and I would totally be 
in favour for that sort of thing, but I figured that reusing Typed TH would be 
a less cumbersome way to implement this. If people are in favour of a more 
elaborate approach, I'm all ears, but I fear that might be out of my league to 
implement :)

Cheers,
Merijn

> On 6 Feb 2015, at 21:54, Gershom B <gersh...@gmail.com> wrote:
> 
> I recall having some discussions with Mathieu Boespflug regarding how the 
> static pointers work could be of use here. (And also Richard Eisenberg?) In 
> particular, we want to demand a special property of our validation functions 
> -- that they can safely be used at compile-time without necessarily "linking 
> in the world" and invoking the whole of template haskell.
> 
> A function that is "static" should in a sense have this sort of property? And 
> so requiring that our validation functions be static seems like a useful 
> thing from an implementation standpoint. Static semantics might also help 
> "force the thunk" on what the correct relationship to polymorphism is.
> 
> I guess the remaining question is then where to add them. I suppose we could 
> stick them with special semantics on Num and IsString or the like and do it 
> by magic?
> 
> Alternately we could maybe have a whole class of "compile-time static 
> functions" that we just explicitly use, and all have the property that they 
> have type "a -> a" for some concrete "a", and that the value they are applied 
> to is static. These functions are then applied at compile time, and forced to 
> whnf. If they toss an error it is a compile error, otherwise they are not 
> present in the generated code.
> 
> There are other design variations possible, but that one feels pretty neat to 
> me, if feasible.
> 
> So then I could write
> 
> foo :: Even
> foo = even 6
> 
> for example, and get errors at compile-time.
> 
> On top of this we could add a special way to augment Num, IsString, etc with 
> such methods to yield the desired:
> 
> foo :: Even
> foo = 6
> 
> -gershom
> _______________________________________________
> ghc-devs mailing list
> ghc-devs@haskell.org
> http://www.haskell.org/mailman/listinfo/ghc-devs

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs

Reply via email to