我正在嘗試在Haskell中使用Maybe類型。我查找了返回Maybe的關鍵值數組。如何訪問由Maybe包裝的數據?例如,我想將Maybe包含的整數與另一個整數相加。在Haskell中使用Maybe類型
回答
對不起,我應該GOOGLE更好。
使用fromMaybe函數正是我所需要的。 fromMaybe將返回Maybe中的值,如果它不是什麼也不返回,否則它將返回提供給fromMaybe的默認值。
http://www.haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/Data-Maybe.html
是的,但要確保這是你想要的行爲,因爲如果你打算,例如,使用一個Maybe Int,然後每當它沒有時你返回零,那麼你應該有從一開始就使用了一個普通的舊Int。也許是應該幫助編碼沒有結果或價值,而不是真的應該被解決。我個人儘量避開fromMaybe函數。 – 2010-09-11 03:44:25
你可以使用Data.Maybe.fromMaybe
,這需要一個Maybe a
和值,如果它是Nothing
使用。您可以使用不安全的Data.Maybe.fromJust
,如果值爲Nothing
,則會發生崩潰。你可能想保留在Maybe
。如果你想在一個Maybe
添加一個整數,你可以不喜歡
f x = (+x) <$> Just 4
這是一樣的
f x = fmap (+x) (Just 4)
f 3
然後將Just 7
。 (您可以繼續鏈附加的計算以這種方式)。
正如一個側面說明...
爲 「可能」sumOfThree :: Maybe Int
sumOfThree = do
a <- someMaybeNumber
b <- someMaybeNumber
c <- someMaybeNumber
let k = 42 -- Just for fun
return (a + b + c + k)
例子:
> maybe 0 (+ 42) Nothing
0
> maybe 0 (+ 42) (Just 12)
54
很多人都反對使用fromJust
,但是如果你知道的,當查找失敗會發生什麼它可以方便的(錯誤!)
首先,你需要這樣的:
import Data.Maybe
然後從元組列表您查找看起來像這樣
Data.Maybe.fromJust $ lookup key listOfTuples
例如,成功的查詢:
Data.Maybe.fromJust $ lookup "a" [("a",1),("b",2),("c",3)]
1
而且可怕的失敗看起來是這樣的:
Data.Maybe.fromJust $ lookup "z" [("a",1),("b",2),("c",3)]
*** Exception: Maybe.fromJust: Nothing
- 1. Haskell:如何在遞歸函數中使用Maybe類型?
- 2. 在Haskell中使用Maybe編寫Maximum Monoid
- 3. Haskell String to Maybe List
- 4. Haskell Int和Maybe Int
- 5. 獲取Haskell中Maybe的值
- 6. 在Haskell中將Maybe Int轉換爲Int
- 7. 如何將'Real World Haskell'列表數據類型轉換爲使用Maybe?
- 8. 在Haskell中使用數據類型
- 9. 類型在Haskell
- 10. 在Haskell的類型級編程中使用類型不等式
- 11. 使用高階的Haskell類型在C#
- 12. 在Haskell的數據類型使用Data.Array
- 13. Haskell類型類
- 14. 使用foldr的Haskell類型類
- 15. Haskell:有條件地使用Maybe FilePath執行外部進程
- 16. 類型類Haskell中的數據類型
- 17. 在函數中檢查Haskell類型類
- 18. 類型類在Haskell中如何工作?
- 19. 如何在D中實現Haskell * Maybe *構造?
- 20. 在Haskell中將函數更改爲Maybe函數
- 21. 在Haskell中定義爲Maybe的列表?爲什麼不?
- 22. Haskell中的Int和Maybe Int存在區別嗎?
- 23. 在Haskell中生成Haskell類型的設備(「second order Haskell」)?
- 24. Haskell:從類型
- 25. Haskell TypeCast類型
- 26. Haskell類型類應該如何使用類型?
- 27. Haskell中的函數類型
- 28. Haskell中的類型比較
- 29. Haskell中的類型轉換
- 30. haskell中的代數類型
這是一個重複:http://stackoverflow.com/questions/3375483/operating-on-a-return-from-a-maybe-that -contains-just/3375712#3375712 – 2010-09-04 19:16:49