How are you given the set of rule names and corresponding regexps? Assuming you have them in a list, just iterate over the list.
(defvar rule+regexp-alist '((haskell-comment . "\\(\\s-+\\)--\\s-+") (foo . "re1") (bar . "re2"))
"(RULE . REGEXP) pairs, where RULE is a symbol and REGEXP is a string.
(dolist (rl+re rule+regexp-alist)
(add-to-list 'align-rules-list `(,(car rl+re)
(regexp . ,(cdr rl+re))
(mode 'haskell-mode)
(repeat))))
(defvar rule+regexp-alist '((haskell-comment . "\\(\\s-+\\)--\\s-+") (foo . "re1") (bar . "re2"))
"(RULE . REGEXP) pairs, where RULE is a symbol and REGEXP is a string.")
(dolist (rl+re rule+regexp-alist)
(add-to-list 'align-rules-list `(,(car rl+re)
(regexp . ,(cdr rl+re))
(mode 'haskell-mode)
(repeat))))
(But are you sure it is 'haskell-mode
you want in the result, instead of just haskell-mode
? IOW, you want (mode 'haskell-mode)
in the result, not just (mode haskell-mode)
?)
(Yes, I ignored your request to "convert to a function", as I don't see the point of that, from your description. Sounds like you just want to make several similar calls to add-to-list
. If so, then just do that - factor out the "similar" parts and iterate over the list of dissimilar parts.)