Kaveh Shahbazian wrote:
Haskell is the most powerfull and interesting "thing" I'v ever
encountered in IT world. But with an imparative background and lack of
understanding (because of any thing include that maybe I am not that
smart) has brought me problems. I know this is an old issue. But
please help it.
Question : Could anyone show me a sample of using a monad as a
statefull variable?

That question is a bit ill-posed. A monad is a type of interface. A stateful variable would probably be an IORef or a STRef which can be created and used in the IO and ST monads, respectively.

For example see this code in C# :
//
public class Test
{
   int var;
   static void Fun1() { var = 0; Console.Write(var); }
   static void Fun2() { var = var + 4; Console.Write(var); }
   static void Main() { Fun1(); Fun2(); var = 10; Console.Write("var
= " + var.ToString()); }
}
//
I want to see this code in haskell.
Thankyou
_______________________________________________

Here is one translation:

module Imp where

import Data.IORef

data Test = Test {var :: IORef Int
                 ,fun1 :: IO ()
                 ,fun2 :: IO ()
                 ,testMain :: IO ()
                 }

newTest :: IO Test
newTest = do var <- newIORef 0
             let fun1 = do writeIORef var 0
                           print =<< readIORef var
                 fun2 = do modifyIORef var (+4)
                           print =<< readIORef var
                 main = do fun1
                           fun2
                           writeIORef var 10
                           value <- readIORef var
                           print ("var = "++show value)
             return Test {var = var
                         ,fun1 = fun1
                         ,fun2 = fun2
                         ,testMain = main}

main :: IO ()
main = do
  test <- newTest
  fun1 test
  fun2 test
  testMain test
  print =<< readIORef (var test)

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to