这些天我正在学习 Scala。我对 Haskell 有一点熟悉,尽管我不能声称自己很了解它。
给不熟悉 Haskell 的人的附注
我喜欢 Haskell 的一个特点是,不仅函数是一等公民,而且副作用(让我称之为动作)也是一等公民。一个动作,在执行时会给你一个 type 的值a
,属于一个特定的 type IO a
。您可以像传递任何其他值一样传递这些操作,并以有趣的方式将它们组合起来。
事实上,结合副作用是 Haskell 中对它们做某事的唯一方法,因为你无法执行它们。相反,将main
执行的程序是您的函数返回的组合操作。这是一个巧妙的技巧,它可以让函数变得纯粹,同时让你的程序实际上做一些除了消耗能量之外的事情。
这种方法的主要优点是编译器知道您执行副作用的代码部分,因此它可以帮助您捕获错误。
实际问题
在 Scala 中是否有某种方法可以让编译器类型为您检查副作用,例如,您可以保证不会在某个函数内执行副作用?