
Theodore Norvell
Jorge's question raised a question in my mind. The IOExts module has many of the same features as the ST module, why are there two ways to do the same thing? Is the ST module only there for legacy purposes?
My user view is that I appreciate the presence of both. When I write a pure function that can be implemented efficiently in imperative programming, I want the ST monad to support mutable variables. E.g., to implement "f n returns a list of all primes between 2 and n", I want to use a mutable array and hide it. When I write an I/O-bound routine that can be implemented conveniently with state variables, I want the IO monad to support mutable variables. Now my grief is that I cannot write a subprogram with state variables and have it reused in ST and IO. Fortunately I can write a subprogram with mutable arrays and have it reused in ST and IO, so I can write "sort a given array"; but I cannot write "increment a given integer variable". Of course, you can tell me to use mutable arrays of length 1 to simulate mutable variables. Fine!
participants (1)
-
Albert Lai