我试图用我的玩具项目学习Scalaz,我在Haskell中使用monad,现在我想学习如何在Scala中使用Scalaz。
最大的问题是,如何在Scala的主要方法中使用IO()
Monad?
在Haskell中,main函数的类型为IO()
,而在Scala中的类型为()
。
我到目前为止找到的解决方案是创建另一个foo
类型的函数IO()
,并在主方法中调用foo.unsafePerformIO()
。但这让我感到畏缩。
什么是解决方案?
答案 0 :(得分:0)
unsafePerformIO
是完全安全的。
事实上,考虑到大多数Scala项目都不是100%纯/ Scalaz代码,这种方法可能是最惯用的方法。有人可能提供了一个优雅的#34;包装它,但除了化妆品之外它不会增加任何价值。而且,大多数情况下,无论如何,您都要将Scalaz IO动作嵌入更主流,非纯粹甚至可能无功能的Scala代码中。
此外,一般而言,甚至在Haskell中,unsafe
函数通常只是makeSureYouKnowWhatYoureDoing
函数。