Posso usare l'operatore scalaz
|>
quando voglio cambiare funzione e oggetto in modo da ottenere un po' più di leggibilità acquisita. Permettetemi di presentarvi una funzione modello: funzione switch e oggetto con scalaz '|>
def length2(x:String) = x.length * 2
Ora, posso scrivere in entrambi i modi:
"aoeu" |> length2
length2("aoeu")
Ma se definisco questa funzione più generica, smette di funzionare.
def length2(x:SeqLike[_
,_
]) = x.length * 2
length2("aoeu") // ok
"aoeu" |> length2 // doesn't work
Perché il compilatore non lo capisce? Esiste sicuramente una conversione implicita da
String
a un mix di classe nel tratto
SeqLike
.
Ingannevole. All'inizio ho pensato che è possibile avere un implicito alla volta ma ora sembra che sia forse anche un problema di varianza nascosto da qualche parte ... – Debilski
@Debilski, non sono sicuro di dove '|>' è definito in scalaz, ma quando Ho cercato di definire il mio, penso che "l'unica regola implicita" è ciò che gli ha impedito di applicare: "aoeu" avrebbe dovuto essere convertito implicitamente alla classe con il metodo '|>' e poi di nuovo a 'SeqLike'. – huynhjl
Mostra il messaggio di errore. Non tutti hanno Scalaz prontamente disponibile, ma i messaggi di errore di solito spiegano cosa non va. –