The array functions are much nicer than setting everything individually.
Does this work?
-- Array functions
let fmparam function (x:xs) = foldr (#) (function 1 x) (zipWith function [2..] xs)
lfma = fmparam fmamp
lfmr = fmparam fmratio
lfmd = fmparam fmdetune
lfmer op = fmparam (fmegrate op)
lfmel op = fmparam (fmeglevel op)
My haskell is rusty and was never very good to start with, so there's probably a more elegant way to do it.