[Haskell-cafe] If the local variable can be changed ...

John Millikin jmillikin at gmail.com
Tue Mar 9 19:42:06 EST 2010


If your code performs a common task (such as conversion, accumulation,
testing), then you should use higher-level constructs than a for loop.
Using map, filter, foldr, and foldl will make it easier to write
correct code.

If you'd like to imitate a for loop exactly -- that is, to perform
some action multiple times -- it's very easy to create a pure
function. We do not have to stoop to mutable variables.

-------------------------------------------------
for :: Monad m => a -> (a -> Bool) -> (a -> a) -> (a -> m ()) -> m ()
for start test step body = loop start where
    loop x = if test x
        then body x >> loop (step x)
        else return ()

main = for 0 (< 100) (+ 1) $ \i -> do
    -- do something with i
    print i
-------------------------------------------------

On Tue, Mar 9, 2010 at 16:25, zaxis <z_axis at 163.com> wrote:
>
> In FP the variable can not be changed once created. Yes, it has much
> advantage . However, i feel it is too strict.   As we know, the local
> variable is allocated on stack which is thread safe.
>
> So if the local variable can be changed, then we can use loop, etc. same as
> imperative languages. For example, for (i=0; i<100; i++)  where `i` is a
> local variable in function.
>
> Any suggestion is appreciated!
>
>
>
> -----
> fac n = let {  f = foldr (*) 1 [1..n] } in f
> --
> View this message in context: http://old.nabble.com/If-the-local-variable-can-be-changed-...-tp27844016p27844016.html
> Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>


More information about the Haskell-Cafe mailing list