在Maybe中操纵一个值

0 haskell functor maybe

我写的一些代码中的函数返回

Just 3
Run Code Online (Sandbox Code Playgroud)

我想要的是删除Just并操纵3我喜欢.

我必须承认不理解Just语法,但是当我解决这个问题时,我会感激一些帮助.

luq*_*qui 7

Just 3有类型Maybe Int.您可以操纵INT Maybe,即存在的最简单的形式fmap,如

ghci> fmap (\x -> x + 1) (Just 3) 
Just 4
Run Code Online (Sandbox Code Playgroud)

它保留了该Maybe类型的结构,也就是说,它保留了Nothings

ghci> fmap (\x -> x + 1) Nothing
Nothing
Run Code Online (Sandbox Code Playgroud)

或者您可以定义一个模式匹配的函数:

doThing :: Maybe Int -> String
doThing (Just x) = "I got " ++ show x
doThing Nothing  = "I didn't get anything"

ghci> doThing (Just 3)
"I got 3"
Run Code Online (Sandbox Code Playgroud)

还有一个有用的函数叫fromMaybe(定义Data.Maybe):

fromMaybe :: a -> Maybe a -> a
Run Code Online (Sandbox Code Playgroud)

它将从a中提取值Maybe,但是如果结果是,则必须提供返回的值Nothing:

ghci> import Data.Maybe (fromMaybe)
ghci> fromMaybe 0 (Just 3)
3
ghci> fromMaybe 0 Nothing
0
Run Code Online (Sandbox Code Playgroud)

请注意,在所有这些情况下,我们必须决定如果值是什么Nothing,这是该Maybe类型的基本特征.