DBIO, DBIOAction, headOption, emap

そもそもscalazとかモナドとか全く理解していないのでそのお勉強はまたこんどして、
ひとまず使用例だけメモっとく

val action = for {
      hogeOpt <- hogeDao.hoget.map(_.headOption) //*1
      hoge<- hogeOpt.point[DBIO] emap (_ \/> new Exception("ほげありまてん")) //*2
...

*1はDBIOAction
そのままemapを使おうとすると、Cannot resolve symbol emapこれは型がDBIOActionで、

hoge <- hogeDao.hoget.map(_.headOption) emap (_ \/> new Exception("ほげありまてん"))

DBIOのMonadErrorしかないからか、よくわかってないが、、、
ただ、今回に限って言えば、エイリアスがはってあるので、

package slick

/** The `dbio` package contains the Database I/O Action implementation.
  * See [[DBIOAction]] for details. */
package object dbio {
  /** Simplified type for a streaming [[DBIOAction]] without effect tracking */
  type StreamingDBIO[+R, +T] = DBIOAction[R, Streaming[T], Effect.All]

  /** Simplified type for a [[DBIOAction]] without streaming or effect tracking */
  type DBIO[+R] = DBIOAction[R, NoStream, Effect.All]
  val DBIO = DBIOAction
}

明示的に型を指定して、

hoge <- (hogeDao.hoget.map(_.headOption): DBIO[Option[Hoge]]) emap (_ \/> new Exception("ほげありまてん"))

scalazはなんかかっこいいのでちゃんと理解していきたい、、、