Dados de configuração no Scala - devo usar a mônada do Reader?

Como faço para criar um objeto configurável corretamente funcional no Scala? Eu assisti o vídeo de Tony Morris noReader monad e ainda não consigo conectar os pontos.

Eu tenho uma lista codificada deClient objetos:

class Client(name : String, age : Int){ /* etc */}

object Client{
  //Horrible!
  val clients  = List(Client("Bob", 20), Client("Cindy", 30))
}

eu queroClient.clients a ser determinado em tempo de execução, com a flexibilidade de lê-lo a partir de um arquivo de propriedades ou de um banco de dados. No mundo Java, eu definiria uma interface, implementaria os dois tipos de fonte e usaria DI para atribuir uma variável de classe:

trait ConfigSource { 
  def clients : List[Client]
}

object ConfigFileSource extends ConfigSource {
  override def clients = buildClientsFromProperties(Properties("clients.properties"))  
  //...etc, read properties files 
}

object DatabaseSource extends ConfigSource { /* etc */ }

object Client {
  @Resource("configuration_source") 
  private var config : ConfigSource = _ //Inject it at runtime  

  val clients = config.clients 
} 

Esta parece ser uma solução bastante limpa para mim (não muito código, intenção clara), masvar faz pule para fora (OTOH, não parece para mimrealmente problemático, desde que eu seivai ser injetado uma vez e somente uma vez).

Qual seria oReader monad parece nesta situação e, me explica como eu sou 5, quais são suas vantagens?

questionAnswers(1)

yourAnswerToTheQuestion