リストが空でない場合にリストに関数を適用するscalaまたはscalazの関数はありますか? それ以外の場合は、デフォルト値を返します。関数は、リストの要素ではなく、リスト自体に適用する必要があります。つまり、次のことを実現します。
implicit class RichList[A, M[A] <: Iterable[A]](list: M[A]) {
def convertOrElse[B](fn: M[A] => B, whenEmpty: B) = {
if (!list.isEmpty) fn(list) else whenEmpty
}
}
使用例: mylist.convertOrElse("prefix " + _.mkString(", "), "")
これはどこかで見た覚えがありますが、ブログの投稿などにあったかもしれません。現時点では scalaz で見つけることができないようですが、最近の scalaz ドキュメントをオンラインで見つけることさえできません (それは別の問題です :)
ご覧のとおり、私は独自の Implicit を作成しましたが、適切な scalaz インポートでうまくいく場合に、独自の Implicit を追加するのは嫌いです。