Yes, we can imitate all of it (such as `when`, `until` and `for`) because haskell is a good DSL language. However, i feel it will be more convenient if the language itself supports all these fundations.
jmillikin wrote: > > 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 <[email protected]> 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 >> [email protected] >> http://www.haskell.org/mailman/listinfo/haskell-cafe >> > _______________________________________________ > Haskell-Cafe mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/haskell-cafe > > ----- 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-...-tp27844016p27845844.html Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com. _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
