Excellent.  Jacques: do try it out!

I believe that there are new branches in these repos (Geoff yell if not)
        ghc
        testsuite
        base
        template-haskell

I can't help feeling that
        [|| foo ||]
        $$(foo)
is too heavy a syntax, and will make it seem horrid an clunky.  Two-character 
brackets are bad enough. What about
        [@ foo @]
        &(foo)
Other suggestions welcome.  Trivial yet important.

Simon

Microsoft Research Limited (company number 03369488) is registered in England 
and Wales
Registered office 21 Station Road, Cambridge, CB1 2FB 

| -----Original Message-----
| From: [email protected] [mailto:[email protected]]
| On Behalf Of Geoffrey Mainland
| Sent: 16 May 2013 16:22
| To: [email protected]
| Cc: [email protected]
| Subject: New branch implementing typed/untyped Template Haskell
| 
| I have pushed a new branch, th-new, that partially implements the
| proposal outlined in Simon PJ's "New directions for Template Haskell"
| post at:
| 
| http://hackage.haskell.org/trac/ghc/blog/Template%20Haskell%20Proposal
| 
| The main missing features are top-level pattern splices and local
| declaration splices.
| 
| Typed expression quotations and typed expression splices *are*
| implemented. Syntax is as in Simon's original proposal: [|| ||] for
| typed expression brackets and $$(...) for typed expression splices. One
| can now write:
| 
| power :: Int -> TExp (Int -> Int)
| power n = [|| \x -> $$(go n [|| x ||]) ||]
| where
| go :: Int -> TExp Int -> TExp Int
| go 0 x = [|| 1 ||]
| go n x = [|| $$x * $$(go (n-1) x) ||]
| 
| In fact, one can even write:
| 
| power :: Num a => Int -> TExp (a -> a)
| power n = [|| \x -> $$(go n [|| x ||]) ||]
| where
| go :: Num a => Int -> TExp a -> TExp a
| go 0 x = [|| 1 ||]
| go n x = [|| $$x * $$(go (n-1) x) ||]
| 
| Writing the following
| 
| f :: TExp Char -> TExp Integer
| f x = [|| $$x * 3 ||]
| 
| gives the error
| 
| Main.hs:28:7:
| Couldn't match type ‛Char’ with ‛Integer’
| Expected type: TExp Integer
| Actual type: TExp Char
| In the Template Haskell quotation [|| $$x * 3 ||]
| In the expression: [|| $$x * 3 ||]
| In an equation for ‛f’: f x = [|| $$x * 3 ||]
| 
| The th-new branch of ghc has accompanying branches for template-haskell
| and testsuite, both named th-new. These are mirrors of my local branch,
| and I reserve the right to rebase them :). That said, please do try it
| out!
| 
| Geoff
| 
| 
| _______________________________________________
| ghc-devs mailing list
| [email protected]
| http://www.haskell.org/mailman/listinfo/ghc-devs
_______________________________________________
ghc-devs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/ghc-devs

Reply via email to