Scalaz和主要方法

Nic*_*yka 3 monads haskell scala scalaz

我正在尝试用我的玩具项目学习Scalaz,我在Haskell中使用monad,现在我想学习如何在Scala中使用Scalaz.

最大的问题是,如何IO()在Scala的主要方法中使用Monad?

在Haskell中,主要功能是类型,IO()而在Scala中它是类型().

到目前为止我找到的解决方案是创建另一个foo类型的函数IO()并在main方法调用中foo.unsafePerformIO().但这让我感到畏缩.

什么可以解决方案?

Tra*_*own 7

Scalaz提供了一个SafeApp特性,允许您main使用看起来更像Haskell的包装器替换Scala的副作用方法main:

import scalaz._, Scalaz._, effect.{ IO, SafeApp }

object MyMain extends SafeApp {
  override def runl(args: List[String]): IO[Unit] = IO(println("hello world"))
}
Run Code Online (Sandbox Code Playgroud)

现在MyMain可以像任何其他带静态的JVM类一样使用main.

我个人并没有SafeApp太多使用,但如果你想避免unsafePerformIO手工打电话,它就在那里.