Skip to content

Monad last exercise doesn't compile #36

@ggalmazor

Description

@ggalmazor

The following code doesn't compile:

implicit def optionTMonad[F[_]](implicit F: Monad[F]) = {
  new Monad[OptionT[F, ?]] {
    def pure[A](a: A): OptionT[F, A] = OptionT(F.pure(Some(a)))
    def flatMap[A, B](fa: OptionT[F, A])(f: A => OptionT[F, B]): OptionT[F, B] =
      OptionT {
        F.flatMap(fa.value) {
          case None => F.pure(None)
          case Some(a) => f(a).value
        }
      }
  }
}

Running this code gives this error messages:

<console>:37: error: not found: type ?
         new Monad[OptionT[F, ?]] {
                              ^
<console>:37: error: OptionT[F,<error>] takes no type parameters, expected: one
         new Monad[OptionT[F, ?]] {

I'm running this in the REPL launched with sbt console and this build.sbt file:

name := "Scala Playground"

version := "1.0"

scalaVersion := "2.11.1"

libraryDependencies += "org.typelevel" %% "cats" % "0.6.1"

PS: Also, it's not very clear what's the point of this last exercise nor the result it should give... Maybe some extra explanation would make it easier to understand, especially about the type parameters' meanings in OptionT and optionTMonad...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions