[Haskell] How to implement Association-Lists and Property-Lists in Haskell

Tom Jordan viresh53 at gmail.com
Wed May 26 05:59:34 EDT 2010


Greetings,

I'm struggling to find a way to define an "Alist" once, and then simply
add-in "Fields" to it incrementally.. without having to keep using new
identifiers/variables to hold the result of each "addin" expression.
I understand that pure Functional Programming doesn't use destructive state
changes, but I'm wondering if there is a way to make this happen using
Monads, for example  (which I have a cursory understanding of..)

Instead of doing this:

type Root = String
type Oct  = Integer
type Mode = Integer

data Field = Root Root | Oct Oct | Mode Mode deriving (Show)

type Alist = [Field]

addin :: Alist -> Field -> Alist
addin p f = f:p

p0 :: Alist
p0 = []
p1 = addin p0 (Root "c")
p2 = addin p1 (Oct 4)
p3 = addin p2 (Mode 3)
p4 = addin p3 (Oct 3)
-- ... p42, etc


For the Alist version, when adding-in a Field with the same constructor-name
as one that has already been added-in, it adds-in a brand new entry (with a
repeated key-name (in the form of another constructor) and its associated
value), as a normal association list does..

I'm also looking to define a Property-List version, where a
Field-name/constructor can update a previous value (if the Field has already
been added), or add-in a new entry if the Field hasn't been added yet.


Many Thanks,

Tom Jordan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell/attachments/20100526/28048e2c/attachment.html


More information about the Haskell mailing list