Dato un insieme di ADT che hanno due sotto insiemi distinti Ad esempio:Scala utilizzando informe combinare coprodotti superiore kinded sopra una trasformazione naturale
sealed trait Domain[Y]
sealed trait Command[Y] extends Domain[Y]
sealed trait Query[Y] extends Domain[Y]
case class Add(value:String) extends Command[Ack]
case class Remove(value:String) extends Command[Ack]
case class Exists(value:String) extends Query[Boolean]
case object List extends Query[List[String]]
Ora Supponiamo di avere due trasformazioni naturali, per qualche arbitraria Monade M [_]:
val commandHandler:Command ~> M
val queryExecutor:Query ~> M
desidero unire in qualche modo queste due trasformazioni naturali in un unico trasformazione:
val service:Domain ~> M = union(commandHandler, queryExecutor)
Tuttavia stiamo lottando per uscire dal blocco di partenza con avere coprodotti più elevati. Anche un punto nella giusta direzione sarebbe utile in questa fase.
che sposta certamente sposta il problema in un luogo più facile, in cui ha bisogno per mappare un dominio -> Xor.Left [Comando] o Xor.Right [Query]. Questo potrebbe essere approssimativamente ottenuto con Typetags, ma approfittare dell'Adt sarebbe meglio –
puoi facilmente comporre un altro '~>' per lavorare sul tipo 'Dominio' se vuoi come mostrato nella mia modifica – Markus1189