Restricted Template Haskell
Greg Weber
greg at gregweber.info
Sat Jan 31 16:33:49 UTC 2015
On Fri, Jan 30, 2015 at 7:05 PM, adam vogt <vogt.adam at gmail.com> wrote:
> Hi Greg,
>
> Perhaps a less-invasive way to implement the -XSafe part of your
> proposal would be to provide a module like:
>
> module Language.Haskell.TH.Safe (
> module Language.Haskell.TH,
> reifyWithoutNameG,
> ) where
> import Language.Haskell.TH hiding (runIO, reify*)
>
> where reifyWithoutNameG is the same as reify, except definitions that
> are out of scope are either missing or modified such that they use
> NameQ instead of NameG for out-of-scope names.
>
Thanks, I added this concept to the wiki.
> That way there is no new syntax needed, and safe TH can be called by
> unsafe TH without any conversions.
>
> I think defining another monad like Q that can do less is too
> inconvenient because you have to disambiguate between Safe.listE and
> Unsafe.listE, or make those functions more polymorphic (which makes
> type errors worse). Another option would be if there were
>
Oh, you are getting into more concrete details now than I have even thought
about!
For the restricted monad route, we might look into a more capable method of
using capabilities that would end up looking like this:
reify :: Name -> Restrict (TH :+: Reify) Info
runIO :: IO a -> Restrict (TH :+: RunIO) a
There are still a lot of details to work out, thanks for getting things
started.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/ghc-devs/attachments/20150131/a6927fe9/attachment-0001.html>
More information about the ghc-devs
mailing list