在庇护所上使用`.of`构造函数

cal*_*-io 5 javascript functional-programming fantasyland sanctuary

我正在研究有关函数式编程的教程,该教程使用sanctuary.js库显示以下代码示例:

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

S.add(
  Maybe.of(3)
  ,Maybe.of(5)
)
.map(n => n * n)
Run Code Online (Sandbox Code Playgroud)

我得到了错误Maybe.of is not a function。sanctuary.js API文档显示了一个使用.ofas 的示例S.of(S.Maybe, 42),因此我修改了我的代码,如下所示:

...
S.of(S.Maybe, 3)
,S.of(S.Maybe, 5)
Run Code Online (Sandbox Code Playgroud)

我得到错误:

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

The value at position 1 is not a member of ‘FiniteNumber’.
Run Code Online (Sandbox Code Playgroud)

我没有在庇护所网站上看到有关FiniteNumber类型类的任何文档。如何使此代码起作用?并且有什么方法可以将保护区.of构造函数链接到类型类上,因此教程站点上的示例可以正常工作吗?

Ber*_*rgi 4

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

在庇护所中,您可以使用

S.lift2(S.add, S.Just(3), S.Just(5)) // Just(8)
Run Code Online (Sandbox Code Playgroud)

或者

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)
Run Code Online (Sandbox Code Playgroud)

或者

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)
Run Code Online (Sandbox Code Playgroud)