【发布时间】:2012-07-22 03:40:22
【问题描述】:
这些天我正在学习 Scala。我对 Haskell 有点熟悉,虽然我不能声称自己很了解。
对Haskell不熟悉的人的补充说明
我喜欢 Haskell 的一个特点是,不仅函数是一等公民,副作用(让我称之为动作)也是一等公民。执行时将赋予您a 类型值的操作属于特定类型IO a。您可以像传递任何其他值一样传递这些操作,并以有趣的方式将它们组合起来。
事实上,结合副作用是 Haskell 中对它们做某事的唯一方法,因为你无法执行它们。相反,将执行的程序是由main 函数返回的组合操作。这是一个巧妙的技巧,它可以让函数成为纯函数,同时让您的程序实际做一些事情而不是消耗能量。
这种方法的主要优点是编译器知道您执行副作用的代码部分,因此它可以帮助您捕获错误。
实际问题
在 Scala 中是否有某种方法可以让编译器类型为您检查副作用,例如,保证您不会在某个函数内执行副作用?
【问题讨论】:
-
一段时间以来,我一直在以公开的书面形式和我自己的想法发表附文。但我不知道他们的名字。不经意间,你教育了我。 #upvoting
标签: scala functional-programming monads side-effects purely-functional