Hi Paul,

To make things concrete, the example I'm really thinking of is a "send
an email" function, which would take a subject, a body, a list of
recipients, optional lists of cc and bcc recipients, an optional
mailserver (default localhost), an optional port (default 25), and
possibly optional authentication details.

Records are your friend.

data Email = Email {subject :: String, body :: String, to ::
[Address], cc = [Address], bcc = [Address], mailserver :: String, port
:: Int}

defaultEmail = Email{subject = "No subject", body = "", to = [], cc =
[], bcc = [], mailserver = "localhost", port = 25}

The user can then go:

sendEmail defaultEmail{subject="Subject here", body = "body here", to
= ["haskell-cafe"], mailserver = "server.haskell.org"}

Now things which are't specified (port) keep their default value.

The other alternative is:

data EmailParams = Body String
                           | Port Int
                           | Mailserver String
                             ...

then:

sendEmail [Body "body here", To "haskell-cafe", Mailserver
"server.haskell.org" ...]

I prefer the first, but the second can also be done.

Thanks

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

Reply via email to