Re: [Haskell-cafe] Building pattern and trying monads

2012-05-28 Thread Yves Parès
observe $ flip runStateT 10 $ (put 0 mzero) | modify (+3) ((),13) If the only thing you need is backtracking, using LogicT might be a little overkill, using Maybe in the bottom of you monad stack suits just fine: case flip runStateT 10 $ (put 0 mzero) | modify (+3) of Just x -

Re: [Haskell-cafe] Building pattern and trying monads

2012-05-28 Thread Roman Cheplyaka
* Yves Parès yves.pa...@gmail.com [2012-05-28 11:28:22+0200] observe $ flip runStateT 10 $ (put 0 mzero) | modify (+3) ((),13) If the only thing you need is backtracking, using LogicT might be a little overkill, using Maybe in the bottom of you monad stack suits just fine: case flip

Re: [Haskell-cafe] Building pattern and trying monads

2012-05-28 Thread Yves Parès
Actually, I think the backtracking property here stems more from the MonadPlus StateT instance than from the properties of Maybe. (mplus a b runs a and b by passing explicitely the same state to them). 2012/5/28 Roman Cheplyaka r...@ro-che.info * Yves Parès yves.pa...@gmail.com [2012-05-28

[Haskell-cafe] Building pattern and trying monads

2012-05-27 Thread L Corbijn
Hello cafe, I'm working on a project where the main goal of the program is building some complex output (e.g. a Haskell function, module, etc.). In this process there is almost always some partially finished product on which to work. Currently I'm modelling this with a wrapper around StateT

Re: [Haskell-cafe] Building pattern and trying monads

2012-05-27 Thread Stephen Tetley
It's common to use a writer monad possibly stacked with other monads (e.g. a state monad for fresh variable names) for code generation that approximates macro expansion - i.e. one call in Haskell maps to one-or-more lines of code in the output language, no global transformations are permitted. If

Re: [Haskell-cafe] Building pattern and trying monads

2012-05-27 Thread wren ng thornton
On 5/27/12 8:21 AM, L Corbijn wrote: 2. My solution with saving/reverting monad-stacks seems quite a hassle/hack, so is it a good approach or is there something better? One good solution for backtracking is to use logict[1]. I've used it with various state-like monads and it works well (e.g.,

Re: [Haskell-cafe] Building pattern and trying monads

2012-05-27 Thread Roman Cheplyaka
* L Corbijn aspergesoe...@gmail.com [2012-05-27 14:21:39+0200] The solution I've in mind depends on the stack being pure. When the monad stack is pure a rule can be applied, returning a maybe value (or having a MaybeT wrapper) and when returning Nothing (failed rule) reverting the stack to