[Haskell-cafe] Rethinking OO idioms

David Roundy droundy at abridgegame.org
Thu Sep 30 05:01:28 EDT 2004

On Wed, Sep 29, 2004 at 08:29:47PM +0000, John Goerzen wrote:
> So I am thinking about a ConfigParser for Haskell.  The first thing that
> occured to me is that Haskell has no OO features, so I'm not sure what
> is the best way to handle the "class" and its various methods.
> The next thing that occured to me is that, unlike OCaml and Python
> classes, Haskell has no mutable variables.  A call like
> config.setOption("main", "initpath", "/usr") in Python -- which alters
> the state of the config object and returns nothing -- would be
> impossible in Haskell (unless perhaps the FiniteMaps are mutable
> somehow?)

I might define just two IO functions:

parseConfig :: FilePath -> IO Config
modifyConfig :: FilePath -> (Config -> Config) -> IO Config

This way, you could do all the modification in pure functional code, which as
Alastair said, would create a "new" Config rather than modifying the
existing one.

Of course, you could also define a

writeConfig :: FilePath -> Config -> IO ()

but then a user of your class could accidentally overwrite a change, if you
had two parts of the code which read the same config, each made separate
changes, and then each wrote their separate changes.
David Roundy

More information about the Haskell-Cafe mailing list