haskell - 将 `a -> Maybe b` 函数应用于 `Maybe a`
问题描述
假设我有一个函数,它从编码为字符串的整数列表中解析parse :: String -> Maybe (Integer, String)
第一个整数,并返回剩余字符串在哪里或解析失败。i
s
1,2,3
Just (i, s')
s'
Nothing
然后我怎样才能简洁地将这个函数应用于一个Maybe String
?parse <$> maybeString
具有冗余类型Maybe (Maybe (Integer, String))
并为此编写自定义模式匹配函数似乎是矫枉过正。
<$>
更一般地说:是否有类型的等价物(a -> f b) -> f a -> f b
(或者那没有意义?)。
编辑:我很愚蠢,我才意识到这有 Hoogle。这就是我们需要 Monads 的目的吗?(我还没有达到 Haskell 的那部分)。
解决方案
听起来您正在寻找(>>=)
可以使用 like的内容maybeString >>= parse
。这要求您正在使用的数据类型是Maybe
满足的 Monad。