Как подразумевал @BogdanVakulenko в своем ответе, String
не является Функтором (F[_]
).
Класс типов Traverse
у кошек имеет следующее объявление:
@typeclass trait Traverse[F[_]] extends Functor[F] with Foldable[F] with UnorderedTraverse[F] { self => ... }
Способ, которым вы решили это с помощью toList
и mkString
, мне подходит, но, если вы хотите простую ванильную версию Scala, которая работает:
def toRnaScala(dna: String): Option[String] = {
val maybeChars: immutable.Seq[Option[Char]] = dna.map(mMap)
maybeChars.foldLeft(Option("")) {
case (acc, Some(c)) => acc.map(_ + c)
case (_, None) => None
}
}