[Haskell-cafe] Indentation Creep
Thomas Conway
drtomc at gmail.com
Sun Jul 15 19:29:41 EDT 2007
On 7/16/07, Claus Reinke <claus.reinke at talk21.com> wrote:
> enjoy (i hope:-),
Very much. Work hasn't been so much fun since.... Well, for a long time. :-)
One small question, which might reveal if I've understood things aright.
> (do (v,e) <- dmin' l
> (do guard e
> me <- empty m
> re <- nullT r
> write m p (v,me && re))
> `mplus` return ((v,e)))
> `mplus` (do v <- readTVar' m
> re <- nullT r
> write m p (v,re))
> `mplus` (do (v,e) <- dmin' r
> when e $ writeTVar' p Empty
> return ((v,e)))
> `mplus` error "emit nasal daemons"
If I refactor this a little into dminLeft dminMiddle and dminRight, I
believe I should be able to replace this with:
...
msum [dminLeft l m r, dminMiddle m r, dminRight r, error "emit
nasal daemons"]
where
dminLeft l m r = do
(v,e) <- dmin' l
(do guard e
me <- empty m
re <- nullT r
write m p (v,me && re)) `mplus` return (v,e)
dminMiddle m r = do
v <- readTVar' m
re <- nullT r
write m p (v,re)
dminRight r = do
(v,e) <- dmin' r
when e $ writeTVar' p Empty
return (v,e)
....
Is this correct? And if so, is GHC likely to do constant folding on
msum over the list skeleton?
T.
--
Dr Thomas Conway
drtomc at gmail.com
Silence is the perfectest herald of joy:
I were but little happy, if I could say how much.
More information about the Haskell-Cafe
mailing list