[Haskell-beginners] hiding members of a data, separate accessors instead

Emmanuel Touzery etouzery at gmail.com
Sun Mar 24 17:14:11 CET 2013


 i was looking at the response type in http-streams:

 I'm used that simply the data type and all its "members" are visible --
the functions to access its contents. But in this case on the HTML
documentation the response type looks like it has no members. And the
author has defined like "public accessors" later in the code:

getStatusCode :: Response -> StatusCode
getStatusCode = pStatusCode

So I'm not even sure how he achieved that the members are not visible,
the data are exported with (..) as is usually done... And the other thing
is why
would you do that.. You could name the member getStatusCode in the first
place, but then it might increase encapsulation to hide it (depending on
how he
managed to hide the members).. But did you then make
it impossible to deconstruct a Response through pattern matching? That
sounds like a minus... Although pattern matching on a data with 6 fields
is always going to be a pain and decreasing the chances for modifying
the data type without breaking compatibility.

These "members" are also causing me problems in other situations, for
instance I have some cases when I use a data type only a few times and with
-Wall the compiler tells me I don't use the accessor; in fact I read that
value from the data, but through pattern matching/deconstruction only, not
through that particular function. I'm thinking to try to hide the warning
as I think my code is correct.

Anyway I'm curious on the mechanism used by that library... I've already
noticed a few nice tricks in this library, like a small state monad to take
optional parameters, much more elegant than any other mechanism i've seen
so far to achieve the same effect.

Thank you!

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20130324/ab8aab46/attachment.htm>

More information about the Beginners mailing list