在 Sanctuary Maybe 上使用 .of 构造函数

Using `.of` Constructor on Sanctuary Maybe

我正在研究 tutorial 函数式编程,它显示了以下使用 sanctuary.js 库的代码示例:

var S = require('sanctuary')
var Maybe = S.Maybe

S.add(
  Maybe.of(3)
  ,Maybe.of(5)
)
.map(n => n * n)

我收到错误 Maybe.of is not a function。 sanctuary.js API documentation 显示了将 .of 用作 S.of(S.Maybe, 42) 的示例,因此我修改了我的代码:

...
S.of(S.Maybe, 3)
,S.of(S.Maybe, 5)

我收到错误:

add :: FiniteNumber -> FiniteNumber -> FiniteNumber
       ^^^^^^^^^^^^
            1

The value at position 1 is not a member of ‘FiniteNumber’.

我在避难所网站上没有看到任何关于 FiniteNumber 类型的文档 class。我如何使这段代码工作?有什么方法可以将避难所 .of 构造函数链接到类型 classes 上,以便教程网站上的示例有效吗?

您不能将两个 Maybe 相加,只能将两个数字相加。请注意,您阅读的教程使用 add = R.lift(R.add).

在避难所,可以使用

S.lift2(S.add, S.Just(3), S.Just(5)) // Just(8)

S.ap(S.map(S.add, S.Just(3)), S.Just(5)) // Just(8)
S.Just(3).map(S.add).ap(S.Just(5)) // Just(8)

S.ap(S.ap(S.Just(S.add), S.Just(3)), S.Just(5)) // Just(8)
S.Just(S.add).ap(S.Just(3)).ap(S.Just(5)) // Just(8)

为了将一些值包装到 Maybe 你应该使用函数 S.toMaybe 而不是 Maybe.of