[Haskell-cafe] Re[2]: strict Haskell dialect
Brian Hulley
brianh at metamilk.com
Fri Feb 3 14:33:12 EST 2006
Bulat Ziganshin wrote:
> Hello Wolfgang,
>
> Friday, February 03, 2006, 1:46:56 AM, you wrote:
>>> i had one idea, what is somewhat corresponding to this discussion:
>>>
>>> make a strict Haskell dialect. implement it by translating all
>>> expressions of form "f x" into "f $! x" and then going to the
>>> standard (lazy) haskell translator. the same for data fields - add
>>> to all field definitions "!" in translation process. then add to
>>> this strict
>>> Haskell language ability to _explicitly_ specify lazy fields and
>>> lazy evaluation, for example using this "~" sign
[Apologies for replying to a reply of a reply but I don't seem to have
received the original post]
I've been thinking along these lines too, because it has always seemed to me
that laziness is just a real nuisance because it hides a lot of inefficiency
under the carpet as well as making the time/space behaviour of programs
difficult to understand...
One question is how to get some kind of "do" notation that would work well
in a strict setting.
The existing "do" notation makes use of lazyness in so far as the second arg
of >> is only evaluated when needed. Perhaps a new keyword such as "go"
could be used to use >>= instead ie:
go {e1;e2;e3} === e1 >>= (\_-> (e2 >>= (\_->e3)))
Of course this doesn't solve the problem of how to translate programs that
make heavy use of mapM etc.
I wonder: is monadic programming really dependent on lazyness or is there a
realistic (ie not impossibly complicated) way to use monads in a strict
setting?
A related question is: could monadic programming ever be as efficient as
side-effect programming?
Regards, Brian.
More information about the Haskell-Cafe
mailing list