Proposal: ValidateMonoLiterals - Initial bikeshed discussion
Merijn Verstraaten
merijn at inconsistent.nl
Mon Feb 9 09:51:38 UTC 2015
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 <gershomb at 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 at haskell.org
> http://www.haskell.org/mailman/listinfo/ghc-devs
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 842 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://www.haskell.org/pipermail/ghc-devs/attachments/20150209/7c79222b/attachment.sig>
More information about the ghc-devs
mailing list