If some record can change it's a good idea to use a sum type, e.g. you start out with your new program like this:
data Wibble = WibbleV0 { port :: Int, name :: String }
A year later you have a new feature that requires more info. Now you can add:
data Wibble = WibbleV0 { port :: Int, name :: String }
| WibbleV1 { port :: Int, name :: String, isAwesome :: Bool }
This has the advantage that you can now create a WibbleV1 from a WibbleV0 with some sensible default behaviour, and then use WibbleV1 internally everywhere.
Another nice feature is that you can warn users of your library that the config interface has changed:
{-# DEPRECATED WibbleV0 "WibbleV0 is deprecated, use WibbleV1" #-}