Tipo de encadeamento do método seguro que não permite repetições de operações

Eu quero implementar o encadeamento de métodos como nessas questões:

Melhor prática para implementar o traço Scala que suporta o encadeamento de métodos ;

DSL Scala: método de encadeamento com métodos sem parâmetros

No entanto, eu quero que uma vez que uma "propriedade" tenha sido usada, ela não pode mais ser usada. Por exemplo, suponha que eu tenha uma classe "Myclass" para a qual desejo permitir o uso da definição "foo" e a definição "bar" no máximo uma vez e não me importo com o tipo de retorno final. Portanto:

val c = new Myclass
c foo //ok !
c foo bar // ok!
c foo foo // refuse to compile
c foo bar foo //refuse to compile

Eu estou lutando com esse problema por um tempo e minha visão começa a ficar confusa! Eu tentei usar classes implícitas, no entanto, se eles precisam analisar objetos quenão tem usei a propriedade associada, e não consigo encontrar como, se eles precisam "consumir" a propriedade removendo-a da propriedade object available e, novamente, não consigo encontrar como.

Atualmente estou pesquisando na API de reflexão, mas ainda é um pouco obscuro para mim.

Ajuda seria apreciada! =)

questionAnswers(2)

yourAnswerToTheQuestion