Thank you! Looks right. I'm validating now. Simon
| -----Original Message----- | From: George Giorgidze [mailto:giorgi...@gmail.com] | Sent: 02 November 2011 23:38 | To: Simon Peyton-Jones | Subject: Re: Monad comprehensions and rebindable syntax | | Hi Simon, | | Today I finally found some time to get started with the implementation of the | proposals I posted on the GHC mailing list a few weeks ago. | | There was a consensus with no objections on removing the default grouping clause from | the SQL-like comprehension notation. Today I just did that, see the patches that are | linked below. | | (The rest of the grouping clauses are unaffected. A consensus has not been reached | on syntax changes for the grouping clauses.) | | In addition to the changes in the code implementing the SQL-like comprehension | notation, I have changed relevant comments, updated relevant GHC documentation | sections, removed the MonadGroup class from the base package and updated the | testsuite. | | * Changes in GHC | For reviewing: | https://github.com/giorgidze/ghc/commit/0cbe437bc3fa47133255a256a27283d75dc401 | 4c | For downloading: | https://github.com/giorgidze/ghc/commit/0cbe437bc3fa47133255a256a27283d75dc401 | 4c.patch | For pulling: git pull git://github.com/giorgidze/ghc.git | | * Changes in base | For reviewing: https://github.com/giorgidze/packages- | base/commit/bfa079b64cf00d38baccfc534710c5e90220d30c | For downloading: https://github.com/giorgidze/packages- | base/commit/bfa079b64cf00d38baccfc534710c5e90220d30c.patch | For pulling: git pull git://github.com/giorgidze/packages-base.git | | * Changes in testsuite | For reviewing: | https://github.com/giorgidze/testsuite/commit/d1fc1b3f3295e1e93d43ebaa5fc48c55 | 6d554208 | For downloading: | https://github.com/giorgidze/testsuite/commit/d1fc1b3f3295e1e93d43ebaa5fc48c55 | 6d554208.patch | For pulling: git pull git://github.com/giorgidze/testsuite.git | | I will move on to implementing (and evaluating the implementation on my use cases) | the rebindable syntax for SQL-like monad comprehensions as outlined in your email. | Having said that, exact timing of that depends on my availability. Next week I am | travelling to Nottingham for my PhD viva. I will try to implement the rebindable | syntax after that. | | I am also planning to have a close look at the issues raised on my proposal for list | literal overloading and if consensus emerges I will try to implement it (also after | my PhD viva). | | Cheers, George | | On 2011-Oct-22, at 23:01 , George Giorgidze wrote: | | > Hi Simon, | > | > Thanks for the detailed instructions. | > | > I will try to implement the suggested changes next week and come back to you with | questions or with a patch. | > | > Cheers, George | > | > P.S. I will also remove the default grouping clause and the MonadGroup class as | suggested in my other email. | > | > | > On 2011-Oct-18, at 23:05 , Simon Peyton-Jones wrote: | > | >> George, | >> | >> Thanks for the example. In every case the reason is the same: | >> | >> * In TcMatches look for 'mkForAllTy'; these uses all insist that the | various operators (mzip, fmap, using) have a type that is more polymorphic than the | Set versions are. | >> | >> * The specifics differ slightly | >> o For 'using', the polymorphic function is immediately instantiated at a single | type (TcMatches line 447, 622). | >> o For `mzip` and 'return' in PatStmt, and 'fmap' in TransStmt, the polymorphic | function is applied to many different types, in DsListComp, line 772, 781, 867 resp. | >> | >> * If we wanted this to work for restricted monads, the *type checker* would | need to perform these type applications; more precisely, we'd need to call tcSyntaxOp | on 'mzip', 'return' etc for each argument-tuple type. So | >> o we'd need a *list* of mzip, return, fmap operators | >> o the type checker would have to anticipate exactly the tuples of bound | variables for which the desugarer would need an instance of 'mzip' etc | >> o we might get errors saying that (say) a triple wasn't an instance of MyClass, | even though the programmer didn't write any triples. | >> Note that (highly inconsistently) the 'return_op' in a TransStmt, line 898, | already is called at a particular tuple type, anticipating the desugarer in exactly | this way, and potentially getting those "triple not an instance of MyClass" errors. | >> | >> My sense is that with rebindable syntax we should bite the bullet and implement | this change. (Once implemented, it'll also work for non-rebindablle syntax; no need | to test the flag.) | >> | >> Would you like to try it? The changes are, I think | >> * Eliminate the trS_fmap field of TransStmt and make the trS_bndrs field | into a list of triples [(idR, idR, SyntaxExpr isR)], where the SyntaxExpr is the fmap | that selects that particular binder from the full tuple. | >> | >> * For ParStmt (HsExpr line 879, perhaps we could do this: | >> ParStmt (ParTree idL idR) | >> (SyntaxExpr idR) -- >>= | >> | >> data ParTree idL idR = ParLeaf [LStmt idL] [idR] | >> (SyntaxExpr idR) | -- return | >> | ParNode (ParTree idL idR) (ParTree | idL idR) | >> (SyntaxExpr idR) - | - mzip | >> | >> The ParTree records the structure of the zip; we keep a (suitably instantiated) | mzip at all the internal nodes, and a (suitably instantiated) return at the leaves. | >> | >> * In TcMatches, don't insist that the 'using' thing is polymorphic, if | rebindable syntax is on. | >> | >> Then all you have to do is make all those SyntaxExprs in TcMatches, and document | (in HsExpr) the types they are expected to have, to express the contract between | TcMatches and DsListComp. So some work is transferred from DsListComp to TcMatches. | >> | >> OK? I think you're well placed to do this. Yell if you need any help. | >> | >> Simon | >> | >> From: George Giorgidze [mailto:giorgi...@gmail.com] | >> Sent: 26 September 2011 10:05 | >> To: Simon Peyton-Jones | >> Subject: Re: Monad comprehensions | >> | >> Hi Simon, | >> | >> Thanks for taking your time and looking at how MonadComprehensions interact with | RebindableSyntax. | >> | >> On Sep 23, 2011, at 8:56 AM, Simon Peyton-Jones wrote: | >> | >>> George | >>> | >>> Could you send me a small example that you would like to work, but which doesn't | because of the too-polymorphic type of fmap and group? If you could make it self- | contained that would be good. | >> | >> I have attached a heavily commented, self-cintained module with concrete examples | summarising what works and what does not work in GHC-7.2. | >> | >> Monad comprehensions with generators and filters do work for restricted monads . | However, parallel and SQL-like comprehensions in GHC-7.2 do not work with restricted | monads. | >> | >> Cheers, George | >> | >> | >> | >> | >>> | >>> Thanks | >>> | >>> Simon | >> | > | _______________________________________________ Cvs-ghc mailing list Cvs-ghc@haskell.org http://www.haskell.org/mailman/listinfo/cvs-ghc