[Haskell-beginners] Re: scope for variables
Maciej Piechotka
uzytkownik2 at gmail.com
Wed Dec 9 17:13:45 EST 2009
On Wed, 2009-12-09 at 22:40 +0100, legajid wrote:
> Hello,
> i wrote the following (very simplified) program :
>
> word :: [Char]
> word="initial"
> letters=['a'..'z']
>
> myloop = do
> myloop2
word from topmost declaration (="initial") if it was used
>
> myloop2 = do
> putStrLn word
word from topmost declaration (="initial")
> putStrLn letters
>
> main = do
> putStrLn "Enter the word"
> word <- enter_word
word="abcdefghij" and is local variable/constant.
> myloop
>
> enter_word= do
> return("abcdefghij")
>
> "word" is initially binded to the value "initial"
> myloop, calling myloop2, displays this value
> "Improving" my program, i add "main" that enters a new value for "word"
> (here a fix one, ideally a getLine)
> To display this new value, i must call myloop with this parameter, which
> is then passed to myloop2.
> Is there a way to make a "global binding ?", thus changing the value of
> "word", so that i don't have to modify the code for myloop and myloop2
> (now being passed a parameter), that worked fine. This would make the
> program modular and easy to modify, without modifying all existing
> functions. Or is it non-sense in Haskell ?
>
It is practically 'non-sense' and would make a program less modular. If
function depends on some value make it an argument.
Generally you should avoid IO as much as possible.
> Thanks,
> Didier.
Regards
PS. Actually it is possible to do it with global variables but:
1. It uses an extentions
2. You should know why in most cases it is not what you want
3. It requires some knoledge about compilation process as
'officially' (w/out extention) it is nondeterministic.
More information about the Beginners
mailing list