[Haskell-cafe] represent data sturcture using function
David Menendez
dave at zednenem.com
Mon Dec 29 01:13:54 EST 2008
2008/12/29 Raeck chiu <raeck at msn.com>:
> People sometime will try to represent a quantity-regard-only data structure
> (such a order-regadless List) using functions instead of ta concrete data
> structure (like the haskell build-in []), any particular reason for this?
>
> For example,
>> data Sex = Male | Female
>> classA :: Sex -> Int
>> classA Male = 100
>> classA Female = 200
>
> when I should prefer the above solution instead of using a concrete data
> structure such as [] to represent the classA members?
One important difference between Sex -> Int and [(Sex,Int)] is that
the first guarantees exactly one Int per Sex and has no underlying
order. (That is, [(Male,100),(Female,200)] and
[(Female,200),(Male,100)] are distinct lists but represent the same
map.)
> It seems to be very difficult to change the number of Male or Female if a
> concrete data structure is not used. Is it possible change the number of Male in classA
> when represent classA using function?
Here's the simplest way:
update k v map = \k' -> if k' == k then v else map k'
Note that it requires an Eq instance for Sex.
let classA' = update Male 150 classA
in (classA' Male, classA' Female)
=
(150,200)
--
Dave Menendez <dave at zednenem.com>
<http://www.eyrie.org/~zednenem/>
More information about the Haskell-Cafe
mailing list