问题标签 [sanctuary]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
263 浏览

javascript - 我应该将什么值传递给 Sanctuary.either()?

我正在尝试运行以下示例。它使用 sanctuary.js。

第 28 行字符 48 出现以下错误:

这是由personTwo.name以下行引起的:

我可以看到 personTwo.name 是一个Left. 为什么这会触发错误而不是返回空字符串?

0 投票
2 回答
337 浏览

javascript - Sanctuary Js 和定义逆变函子

我正在尝试从头开始学习逆变器和对 Sanctuary 的更深入了解。代码“有效”,但我再次没有完全正确的类型。

这是逆变式

我试图让类型正确

然后我的测试

如果我禁用类型检查,那么它会按预期工作,所以从逻辑上讲,它似乎被正确地缝合在一起。我定义了我自己的 contramap 版本

然后我重新运行测试:

因此,尽管讨论了逆变函子是否是解决这个问题的最佳方法(学习练习),但问题是,在定义我自己的逆变函数实现时,我如何可以在启用类型检查的情况下使用 sanctuary 的 contramap 函数


通过添加代码更新后:

将错误更改为:

我对逆变函子的理解是,它在其中预先组合了函数,函数通过 via 传入contramap。所以如果逆变包含函数f并且它contramapg它一起返回一个新的逆变函子包装x = g(f(x)) 我是否误解了这个(太)

0 投票
2 回答
250 浏览

tdd - 如何存根 Fluture?

背景

我正在尝试使用 Flutures 和 Sanctuary 将旧 Promises 中的代码片段转换为某些东西:

https://codesandbox.io/embed/q3z3p17rpj?codemirror=1

问题

现在,通常,使用 Promises,我可以使用像sinonjs这样的库来存根 Promise,即伪造它们的结果、强制解决、拒绝等。

这是基本的,因为它有助于测试多个分支方向并确保一切正常。

然而,对于 Flutures,情况就不同了。不能简单地存根 Fluture,我也没有找到任何可以提供帮助的 sinon 式库。

问题

  1. 你如何存根 Flutures ?
  2. 对使用 Flutures/Sanctuary 进行 TDD 有什么具体建议吗?
0 投票
1 回答
253 浏览

logging - How to log properly in Sanctuary / Fluture?

Background

I have a function, called logInfoAsync. Let's consider this function sends some information to a log server over the network. For the purposes of this question let's assume the function is implemented as follows:

Usage:

Problem

So far so good. We have a standard logger that sometimes works and sometimes it angers the Gods.

Now, let's assume that we have a series sequential async computations:

In this example, what happens if the logger angers the Gods? Well, We fail to save the data! Maybe the request went fine, and maybe the data was valid, but because the logger failed, we got screwed!

Research

Now, a possible solution to this would be to use Fluture.bimap after every log. This would be horrible.

I don't want my logs to be more invasive than they already are and I most definitely do not what to litter my code with Promise styled try/catchs.

Unfortunately for me, this is the only thing I can think off ... I think that the best option would be a backup logger, for example, console.error that is used should the myLogF fail, but I ideally I would want this to be invisible.

The application should not be aware it is being logged at all!

Questions

So, given this snippet, I have the following questions:

  1. How would you keep the chain going if a log fails?
  2. How would you make log failure and recovery invisible to the application ( without littering it with the equivalent of ( try/catch )?
  3. What is the most commonly used pattern for logs?
0 投票
1 回答
84 浏览

javascript - 简单的可能功能错误

背景

我正在尝试帮助 StackOverflow 中的某个人解决有关 Futures、Maybes 和 Eithers 的问题。我的第一种方法是有一个简单的函数来接受 aMaybe并计算一些东西。

代码

我正在使用 Sanctuary,但这相当于 Ramda 或任何其他库。

问题

问题是这个简单的功能因错误而失败:

TypeError: S.Maybe.Just(...).map 不是函数

问题

至少可以说我很困惑。我知道 Maybe 是 Monad,而 Monads 是 Functor。每个 Functor 必须有一个map方法,但不知何故 Maybe.Just (这是一个 Maybe 类型)没有?

我究竟做错了什么?

0 投票
2 回答
858 浏览

functional-programming - 我如何在 sanctuary js 中折叠 Maybe monads

这是一个简单的链式表达式,使用现代 javascript 来查找位于字符串中的特定键的值,该字符串包含逗号分隔的键值对列表,由=.

如果源为空或未找到密钥,这将失败,在我看来,这对于 Maybe monad 来说似乎是一项伟大的任务。

所以我 npm 安装了 sanctuary 并开始使用功能解决方案。这是迄今为止我所获得的,并且觉得它很丑陋,这告诉我我一定做错了什么或使用了错误的工具。

我不希望这是一个“为我解决这个问题”的问题,但我很难传达我真正需要帮助的地方。

注意我仍在尝试“弄清楚” FP,所以这绝对是一个熟悉的问题。

0 投票
1 回答
131 浏览

sanctuary - 与幻想世界 IO 上的避难所映射

我有一个小的代码示例,在使用 ramda 时可以按预期工作,但是我尝试将其移植到 sanctuary 失败了。

问题是 ramda 版本按预期工作,但 sanctuary 版本退出并出现此错误,有人可以解释原因。

0 投票
1 回答
116 浏览

functional-programming - 圣域里的左右到底是什么意思

我试图了解 sanctuary 及其工作,任何人都可以详细解释上述结果在我的理解中,S.reduce 采用映射函数并使用应该是类型的输入数组并减少它但是为什么它在第一种情况下是空数组和第二种情况下的相同数组

0 投票
1 回答
61 浏览

ramda.js - Set property when value is Just

I would like to set the property of an object when the value is Just, and not to set the property when the value is Nothing. However, if the value is Nothing, the returned object become Nothing.

0 投票
2 回答
214 浏览

javascript - 多个 if 的重构

我有这个功能,有两个ifs 我想根据我收到的字母数字代码找到用户。我如何用sanctuary-js重构这个?

我不明白我应该如何处理三种不同的类型:数字代码文字代码未找到代码

- 更新

这是我的功能解决方案(我可能这么认为):

但我不知道它是否是好的代码。另外我问的是 sanctuary-js,因为我认为所有这些对象都不是编程的好方法。