【发布时间】:2020-01-01 11:19:31
【问题描述】:
我可以看到这里有很多关于 Maybe 类型和构图的问题,但我很困惑,如果我很诚实的话,读到这些让我头疼。
这是我的情况:
比方说,我有一个函数:
addm a b = Just (a + b)
如何使用addm 函数创建函数add :: Maybe Int -> Maybe Int -> Maybe Int,而不使用模式匹配来解开Maybes?
我尝试过类似的东西
add x y = (addm <$> x) <*> y
但是这个类型是Maybe Int -> Maybe Int -> Maybe (Maybe Int)
如果可能的话,我还想避免使用标准库之外的任何东西。
编辑:在我的具体情况下,我实际上只需要一个函数Maybe Int -> Int -> Maybe Int
所以我能够使用
add x y = x >>= addm y
成功了。不过,我仍然对原始问题的答案感到好奇。
【问题讨论】:
-
您在寻找的不是应用函子吗?
-
也许吧?我对 Haskell 还是很陌生,所以我真的不明白这如何适用于这种情况。我认为如果
addm本身不返回 Maybe 会正常工作。 -
我已经很长时间没有使用 Haskell 了,但也许这会对你有所帮助:learnyouahaskell.com/…。它不一样,但也许它会引导到正确的轨道
-
@GrayCat 我很确定您需要
Monad实例来执行此操作,而不仅仅是 Applicative 方法 -
@GrayCat 好资源,谢谢;但它并没有真正向我展示我在查找
<*>和<$>时在 Hoogle 上没有看到的任何内容。我还是很困。
标签: haskell monads functor maybe