Paulo, primeiramente, você precisará entrar na documentação de Scala (API docs) na parte de List. Lá, procura a função "map", e pede a "Full Signature":
http://www.scala-lang.org/api/current/#scala.collection.immutable.List
A assinatura total do método será:
final def map[B, That](f: (A) ⇒ B)(implicit bf: CanBuildFrom[List[A], B, That]): That
Resumindo: "map" é uma função que recebe um parâmetro. Esse parâmetro é uma função, que para uma List[A], mapeia A => B, retornando............ bom, aqui as coisas ficam complicadas hahahahaha.
Em Scala, "map" recebe dois parâmetros, na forma de "curried function", isso é, "map" recebe um parâmetro, que retorna uma função, que recebe um parâmetro, que retorna o resultado da função. E esse segundo parâmetro é passado de forma "implícita". Esse segundo parâmetro é um construtor que sabe construir "That", a partir do "B", partindo de uma "List[A]". Confuso? Calma lá rs.
Quando você pede:
Na verdade, você está passando o "0" para o SEGUNDO PARAMETRO do map. Mas então, qual seria o segundo parâmetro? Bom, também é "fácil" de descobrir: o erro de compilação é:
<console>:9: error: type mismatch;
found : Int(0)
required: scala.collection.generic.CanBuildFrom[List[Aluno],Option[Aluno],?]
Ou seja, o segundo parâmetro era para ser um scala.collection.generic.CanBuildFrom[List[Aluno],Option[Aluno],?].
Repare no "?" no final - é que ele não sabe direito o que você está pedindo, já que o builder não foi passado. Bom, a gente sabe que o resultado do seu map é uma "List[Option[Aluno]]", logo, o terceiro tipo é um "List[Option[Aluno]]", porque se a gente olhar na assinatura do Map, vai ver que o terceiro tipo que o CanBuildFrom pede chama "That", e o retorno do map é um That. Então, é só passar o builder apropriado.
Como sabemos qual o builder apropriado? Podemos usar "implicitly":
val builder = implicitly[scala.collection.generic.CanBuildFrom[List[Aluno],Option[Aluno],List[Option[Aluno]]]]
Isso vai retornar um
scala.collection.generic.GenTraversableFactory
Aí, é só passar esse builder para seu map:
AlunoDao.todos.filter(a => a.email == email).map(a => Option(a))(builder)(0)
Bom, essa é a explicação completa rs. Agora, a explicação simples:
Map é uma função que retorna uma função. Essa segunda função pede um "builder", de forma implícita. Se nada for passado, ele implicitamente escolhe um, e retorna um List. Só então, o método "map" resolve, e aí você pode usar o "apply" da List.
Logo:
^-- Segundo parâmetro FOI passado, mas não
atende ao tipo CanBuildFrom... Erro!
Espero ter ajudado! Qualquer dúvida, só falar :D