On Tue, Jun 7, 2011 at 10:32 PM, Evan Laforge
<qdunkan@gmail.com> wrote:
> Is this badly designed code that tries to mimic OO in a functional setting?
> If the answer is yes, how could I achieve same result (eg. testing the code
> that does command REPL) without defining type classes?
Here's how I do it:
data InteractiveState = InteractiveState {
state_read :: IO Command
, state_write :: Result -> IO ()
}
How about :
> data InteractiveState io = InteractiveState {
> state_read :: io Command
> , state_write :: Result -> io ()
> }
Then you don't even depend on some specific monad. I understand you can always (always?) encapsulate what is done through a type class by using a data containing functions. But then, is this not even closer to OO programming, an object that carries its own methods with itself, possibly with the additional overhead that *each* instance would have its own private references to possibly identical functions.
Thanks,
Arnaud