[Haskell-cafe] Idiomatic Haskell equivalent of "keyword
arguments" to functions
Neil Mitchell
ndmitchell at gmail.com
Fri Dec 29 17:32:48 EST 2006
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
More information about the Haskell-Cafe
mailing list