
Hi Alexander, You could quote the whole do-block:
$(strictify [| do y .= x; ... |])
And then strictify :: ExpQ -> ExpQ manipulates the AST a bit: x .= y does
parse as an expression, so you can change a NoBindS containing that .=
function into a BindS or LetS. Unfortunately the quotes built into TH
complain about undefined variables, so you'll probably have to use a
quasiquote instead (haskell-src-meta can help here).
Also, you may want to desugar to "let !x = y `deepseq` y", or involve
(return $!) since "let x = y `deepseq` y where y = undefined :: Int" only
crashes when you seq the x.
Adam
On Wed, Feb 5, 2014 at 7:37 AM, Alexander Alexeev
Hello!
I'm wondering, is there any way to declare assignment operators in Haskell? For example, strict assignment operators:
x .= y -- equals: let x = y `deepseq` y x := y -- equals: x <- y `deepseq` y
As far as I can tell, Template Haskell is not able to do anything like this, because I can't event quote expressions like `let x = y` or `x <- y`. Is there any other way (plugin for GHC, etc)? Or maybe I'm doing something wrong and TH is quite able to handle this task?
I'm pretty sure that I could use a preprocessor, but I wonted to find a better solution.
-- Best regards, Alexander Alexeev http://eax.me/ _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe