问题标签 [maybe]

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 回答
1095 浏览

haskell - 使用 Haskell 的“Maybe”,类型声明 [初学者问题]

我已经开始尝试使用 Haskell 并且遇到了问题。qqq 是一个函数,如果用“Nothing”调用应该打印一个字符串,如果用“Just something”调用则打印其他东西。

第一次尝试似乎有效:

但:

  • 当我试图main = qqq (Nothing)让它失败时(“约束中的模糊类型变量‘a0’:(显示a0)因使用‘qqq’而产生”)
  • 如果失败,我想添加类型签名时:
    • qqq :: Maybe x => x -> IO ()-> Type constructor 'Maybe' used as a class-> 但不是吗?
    • qqq :: (Maybe x) -> IO (). 现在签名本身看起来成功了。但是main = qqq (Just 43)开始失败并出现那个神秘(Show a0)的错误,比如main = qqq (Nothing)以防万一。

问题:

  1. 为什么用 qqqNothing调用与用 调用如此不同Just 43
  2. 是什么(Show a0)?它仅在错误消息中提及。任何使用它的尝试都会导致类似“显示不在范围内”的结果。
  3. 什么是正确的类型签名?如何制作它推导出的 Haskell 打印类型签名?期待类似的东西:
0 投票
6 回答
941 浏览

haskell - 编写此代码的更短方法

以下模式在 Haskell 代码中经常出现。有没有更短的写法?

0 投票
1 回答
367 浏览

functional-programming - 函数返回“No Solution”而不是“Nothing”

我有一个表示谓词逻辑公式的标准数据类型。表示析取的自然演绎消除规则的函数可能如下所示:

当统一失败时,该函数不会评估为 Nothing,而是在 中不返回任何解决方案PACKS

我错过了什么,为什么在统一失败时不el评估?Nothing

0 投票
1 回答
281 浏览

c# - iSynaptic.Commons 和 Maybe Monad

我一直在试图弄清楚如何在我的值检索器可能引发异常的上下文中使用iSynaptic.Commons中的 Maybe monad:

例如:

这可能与可能存在的实施

0 投票
3 回答
4780 浏览

f# - F# 中是否有标准选项工作流程?

标准 F# 库中是否有选项(可能)wokflow(monad)?

我已经找到了这个工作流程的十几个手工实现(12),但我真的不想在我的项目中引入非标准且不太受信任的代码。所有可以想象到的对 google 和 msdn 的查询都让我不知道在哪里可以找到它。

0 投票
2 回答
4797 浏览

haskell - 哈斯克尔初学者

我不明白为什么我会从 GHCi 得到以下回复。不是Maybe构造函数吗?

0 投票
3 回答
1662 浏览

c# - Maybe monad 如何起到短路的作用?

我正在尝试更深入地了解 Monads。因此,我开始深入研究 Maybe Monad。

有一件事我似乎没有做对。读这个:

“因此,Maybe Bind 起到了短路的作用。在任何一个操作链中,如果其中任何一个返回 Nothing,则评估将停止,整个链将返回 Nothing。”

来自: http: //mikehadlow.blogspot.com/2011/01/monads-in-c-5-maybe.html

还有这个:

“对于Maybe<T>类型,绑定是根据简单的规则实现的:如果链在某个点返回一个空值,则链中的进一步步骤将被忽略,而是返回一个空值”

来自:“C# 中的函数式编程” http://www.amazon.com/Functional-Programming-Techniques-Projects-Programmer/dp/0470744588/

好的,让我们看一下代码。这是我的Maybe Monad:

这是我使用 monad 的示例代码:

很明显,我们正在尝试比可能更深入地挖掘节点树。但是,根据我提到的报价,我看不到它是如何运作的。我的意思是,我当然已经排除了空检查并且示例有效。然而,它并没有提前打破这个链条。如果设置断点,您将看到每个Bind()操作都将被使用,因此没有最后一个操作的值。但这意味着,如果我深挖 20 层而实际上只下降了 3 层,我仍然会检查 20 层还是我错了?

将此与非单子方法进行比较:

这难道不应该叫短路吗?因为在这种情况下 if 真的在第一个值为 null 的级别中断。

有人可以帮我弄清楚吗?

更新

正如 Patrik 指出的那样,是的,即使我们只有 3 个级别并尝试深入 20 个级别,每个绑定都会被调用。但是,不会计算提供给 Bind() 调用的实际表达式。我们可以编辑示例以使效果更清晰:

0 投票
3 回答
3132 浏览

haskell - 在 IO 中提取 Maybe 值

鉴于以下情况:

ghci给了我

当然,fromMaybe 工作正常:

但似乎正在执行 IO 操作,然后丢弃:

为什么会这样?有没有办法让 IO monad 更懒惰?

具体来说,考虑value :: IO (Maybe a)到什么是(干净,简洁)的表达方式

并让它解包结果或相应地抛出一个 IOError ?

0 投票
4 回答
591 浏览

haskell - 在 Haskell 中合并/追加 Justs

我正在尝试做在 Haskell 中必须非常明显的事情,即 go fromJust [1]Just [2]to Just [1, 2]。但是我在网上找不到任何东西,因为我一直在寻找相关但无用的页面。那么,您如何实现这一目标?

0 投票
6 回答
8468 浏览

java - 从 Java 访问 scala.None

如何scala.None从 Java 访问?

最后一行导致编译器因“type scala.None 不带参数”而死机。

这失败了“找不到符号构造函数None()”:

这失败了“找不到符号变量无”:

在 2007 年,这曾经奏效,但后来 Scala 发生了变化。Java 编译器给出error: incompatible types