Haskell也许Int到Int

Jer*_*sen 0 int haskell type-conversion maybe

我有一个功能n需要是一个Int但是是一个Maybe Int; 我怎么能转换这个?我知道之前已经问过,但我不明白答案.

where n = case elemIndex column header of
        Nothing -> Nothing
        Just n  -> n
Run Code Online (Sandbox Code Playgroud)

Mar*_*ann 5

您可以使用fromMaybefrom Data.Maybe,但必须提供一个默认值,以便在以下情况下使用Nothing:

*Q46363709> :m +Data.Maybe
*Q46363709 Data.Maybe> fromMaybe 0 (Just 42)
42
*Q46363709 Data.Maybe> fromMaybe 0 Nothing
0
Run Code Online (Sandbox Code Playgroud)

Maybe类型,但是,是一个Functor,所以很多时候,而不是总是提供默认值,你可以fmap调用你的函数的结果.假设您的函数foo具有类型Int -> String,您可以这样做:

*Q46363709> fmap foo $ Just 42
Just "42"
Run Code Online (Sandbox Code Playgroud)

通常,虽然您可能没有良好的输入默认值(即没有良好的默认值Int),但您可能有一个合适的输出默认值.在这种情况下,假设""(空String)是一个很好的默认输出值,您可以fromMaybe在输出而不是输入上使用:

*Q46363709 Data.Maybe> fromMaybe "" $ fmap foo $ Just 42
"42"
*Q46363709 Data.Maybe> fromMaybe "" $ fmap foo $ Nothing
""
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,当输入是Just 42,输出是"42",但是当输入是Nothing,则输出是"".

(顺便说一句,我用showfoo,你可以告诉...)