相关疑难解决方法(0)

为什么Scala没有IO M​​onad?

我想知道为什么Scala没有像Haskell这样的IO Monad.

因此,在Scala中,返回类型的方法readLine是String,而在Haskell中,可比较的函数getLine具有返回类型IO String.

关于这个话题有一个类似的问题,但它的答案并不令人满意:

使用IO肯定不是scala中的主导风格.

有人能解释一下吗?不包括IO Monads到Scala的设计决定是什么?

haskell functional-programming scala

25
推荐指数
1
解决办法
2762
查看次数

帮助我理解这个Scala代码:scalaz IO Monad

这是我试图理解的代码(来自http://apocalisp.wordpress.com/2010/10/17/scalaz-tutorial-enumeration-based-io-with-iteratees/):

object io {
  sealed trait IO[A] {
    def unsafePerformIO: A
  }

  object IO {
    def apply[A](a: => A): IO[A] = new IO[A] {
      def unsafePerformIO = a
    }
  }

  implicit val IOMonad = new Monad[IO] {
    def pure[A](a: => A): IO[A] = IO(a)
    def bind[A,B](a: IO[A], f: A => IO[B]): IO[B] = IO {
      implicitly[Monad[Function0]].bind(() => a.unsafePerformIO,
                                        (x:A) => () => f(x).unsafePerformIO)()
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这段代码是这样使用的(我import io._暗示是隐含的)

def bufferFile(f: File) = IO {   new BufferedReader(new …
Run Code Online (Sandbox Code Playgroud)

monads scala

4
推荐指数
1
解决办法
606
查看次数

标签 统计

scala ×2

functional-programming ×1

haskell ×1

monads ×1