I am not sure using implicits is a good idea. It makes the code harder to read and this use case doesn't fit in any of the cases described in [Effective Scala](http://twitter.github.io/effectivescala/#Types and Generics-Implicits).

I understand that the paremeters are being passed pretty much everywhere, so it might be a good idea to make all of these types path-dependent types based on a parent "factory" class:

```scala
class ParameterizedExchangeStates(paremeters: Parameters) {
   import parameters._
   case class Handshare(override val currentPlayer: Player, [...])
}
```

And in the client code:
 
```scala
val exchangeClasses = new ParameterizedExchangeStates(parameters)
import exchangeClasses._
```

What do you think?