问题标签 [ramda-fantasy]
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.
javascript - 在类型签名中反映对象内部
我正在深入研究 js 中的 FP(我是 FP 的新手),我遇到了一个小“问题”,描述了包裹在 Functors 中的 curried 函数的剩余参数
假设我们有以下咖喱情况:
我想为每个函数指出它仍然期望多少个柯里化参数,即使这些函数被包装在 Functors 中,以避免开发中的任何混淆。
例如,因为makeApiCallFuture
我们可以写String -> String -> String -> Object -> Future
得很清楚。
Next 函数makeApiCallIoFuture
减少了 curried 参数的数量,并将函数的其余部分包装到IO
.
类型签名变得makeApiCallIoFuture :: String -> IO
或者甚至可能makeApiCallIoFuture :: String -> IO a
我认为不够清楚,因为 IO 中的函数仍然是 curried 并且开发人员需要深入研究代码以了解他们仍然需要传递多少参数。
所以,我的问题是 - 是否可以使用类型签名来指示这种情况?也许可以写出类似的东西:
甚至更详细:
ramda.js - 在 null/undefined 的情况下是否可以链接 Maybe?
有一个给定的函数,它是固定的,不能更改:
现在,因为我想成为功能并且想避免空检查,所以我决定使用Maybe
( ramda-fantasy
) 来验证功能:
vv
如果 Y
用 else 调用它应该返回。"fred"
N
vv(null)
返回N
-> 确定vv("fred")
返回Y
-> 确定vv("ding")
返回undefined
-> 错误,预期N
问题是,它Maybe.map
总是返回Just
,我不明白(因为我只是在学习它)。对我来说,如果此函数的行为方式与Maybe(val)
返回None
或Just
.
我有两个问题:
- 为什么
Maybe.map
不处理空/未定义? - 如何重写
vv
它会在所有三种情况下返回预期值?
编辑:我想解释为什么不应该更改 validate :它只是来自外部库的函数的简单示例。我想看看将这些库集成到函数式编程中的难易程度。所以不是关于字符串操作,只是关于在某些时候它评估为空的流式值。
编辑2:
这解决了我的问题:
EDIT3:我已经实现了我自己的 Either 缺少功能:https ://github.com/maciejmiklas/functional-ts/blob/main/src/either.ts
javascript - 按名称 Ramda 对对象进行分组
晚上好,我需要按照他们的昵称对一组对象进行分组,这里我向您展示数据:
在这里,我向您展示了预期的结果:
我尝试在 NodeJs 中从 MongoDB 聚合,但这是不可能的。
javascript - 带有 FP 类型的 Ramda
最近我决定从 lodash 切换到 ramda,以使用编写逻辑的函数式方式。我喜欢它!在对 FP 进行了深入研究之后,我发现它不仅是关于方便的纯/无点实用程序(ramda),而且更多的是关于复杂的(至少对我而言)数学抽象(幻想世界)。我没有完全理解,但是 Either 和 Task 模式看起来很方便。问题是我不确定如何将它与 ramda 实用程序合并。我知道 ramda-fantasy,但它不再维护。Ramda-fantasy 建议的库与 ramda-fantasy 的工作方式不同。有了关于 Monads/Monoids/Functors 类型的所有这些新信息,我完全迷失了。
例如,这个约定是什么?
如果我决定一路切换到 Monads,我是否不需要 ramda?
javascript - 如何执行返回 IO monad 内部函数的函数
我正在使用“Ramda/Fantasy”库来创建 Monads。我正在尝试结合 IO 从 DOM 中获取元素并更改其文本内容。但问题是改变元素内容的函数需要接受两个参数元素和我们想要设置的文本。我不知道如何有效地找到一个看起来像这样的解决方案:
有没有更好的办法?