Tôi đang cố gắng sử dụng loại Có thể trong Haskell. Tôi có một tra cứu cho chìa khóa, giá trị tuples mà trả về một Có thể. Làm cách nào để truy cập dữ liệu được bao bọc bởi Có thể? Ví dụ tôi muốn thêm số nguyên chứa bởi Có thể với một số nguyên khác.Sử dụng Có thể gõ vào Haskell
Trả lời
Xin lỗi, tôi nên có googled tốt hơn.
sử dụng hàm fromMaybe chính xác là những gì tôi cần. fromMaybe sẽ trả về giá trị trong Có thể nếu nó không phải là không có gì, nếu không nó sẽ trả về một giá trị mặc định được cung cấp cho fromMaybe.
http://www.haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/Data-Maybe.html
Vâng nhưng hãy chắc chắn rằng đó là hành vi mà bạn muốn, bởi vì nếu bạn đang đi đến, ví dụ, sử dụng một Int có thể và sau đó mỗi khi nó là Không có gì bạn trở về số không thì bạn nên có chỉ cần sử dụng một Int cũ đồng bằng ngay từ đầu. Có lẽ là nghĩa vụ phải giúp mã hóa sự vắng mặt của một kết quả hoặc giá trị và không thực sự nghĩa vụ phải được làm việc xung quanh. Cá nhân tôi cố gắng chỉ đạo rõ ràng về hàm fromMaybe. –
Bạn có thể sử dụng Data.Maybe.fromMaybe
, trong đó có một và một giá trị Maybe a
để sử dụng nếu nó là Nothing
. Bạn có thể sử dụng không an toàn Data.Maybe.fromJust
, lỗi này sẽ chỉ bị lỗi nếu giá trị là Nothing
. Bạn có thể muốn giữ mọi thứ trong Maybe
. Nếu bạn muốn thêm một số nguyên trong một Maybe
, bạn có thể làm một cái gì đó giống như
f x = (+x) <$> Just 4
mà là giống như
f x = fmap (+x) (Just 4)
f 3
sau đó sẽ được Just 7
. (Bạn có thể tiếp tục chuỗi tính toán thêm theo cách này.)
Cũng giống như một mặt lưu ý: Kể từ Maybe
là một Monad
, bạn có thể xây dựng tính toán sử dụng do
-notation ...
sumOfThree :: Maybe Int
sumOfThree = do
a <- someMaybeNumber
b <- someMaybeNumber
c <- someMaybeNumber
let k = 42 -- Just for fun
return (a + b + c + k)
Ví dụ cho "có thể":
> maybe 0 (+ 42) Nothing
0
> maybe 0 (+ 42) (Just 12)
54
Nhiều người đang chống lại việc sử dụng fromJust
, tuy nhiên nó có thể được thuận tiện nếu bạn nhận thức được điều gì sẽ xảy ra khi tra cứu thất bại (lỗi !!)
Thứ nhất, bạn sẽ cần này:
import Data.Maybe
Và sau đó tra cứu của bạn từ một danh sách các hàng sẽ trông như thế này
Data.Maybe.fromJust $ lookup key listOfTuples
Ví dụ, tra cứu thành công:
Data.Maybe.fromJust $ lookup "a" [("a",1),("b",2),("c",3)]
1
Và khủng khiếp thất bại trông như thế này:
Data.Maybe.fromJust $ lookup "z" [("a",1),("b",2),("c",3)]
*** Exception: Maybe.fromJust: Nothing
- 1. Haskell: mặc định ràng buộc để gõ
- 2. Sử dụng F # Lựa chọn Gõ vào C#
- 3. Haskell: không thể sử dụng "map putStrLn"?
- 4. BASIC sử dụng hệ thống gõ nào?
- 5. Có thể nhúng Haskell vào thư viện C không?
- 6. Không thể gõ vào editText trên trình giả lập Mac
- 7. Làm thế nào tôi có thể xem những gì tôi đang gõ vào telnet?
- 8. Chạm vào gõ trong Visual Studio 2008
- 9. Không thể sử dụng tệp glade xml với haskell
- 10. Sử dụng SSL trong Haskell
- 11. Có thể thay đổi combobox Winforms để vô hiệu hóa việc gõ vào nó?
- 12. Sử dụng QTQuick với haskell
- 13. Haskell QuickCheck2 sử dụng ByteString?
- 14. Sử dụng Hamlet trong Haskell mà không có Yesod
- 15. Thiết kế không thay đổi, có thể gõ, cây
- 16. Chúng ta có thể sử dụng pom.xml vào ANT
- 17. Đệ quy sử dụng danh sách - Haskell
- 18. Có thể sử dụng Văn bản hoặc ByteString trên HXT trong Haskell không?
- 19. Sử dụng "Có thể" của Haskell, nhập khai báo [câu hỏi của người mới bắt đầu]
- 20. Cách gõ phụ thuộc là gì?
- 21. Có thể sử dụng .dll trên Linux
- 22. foldr vs sử dụng foldr1 trong Haskell
- 23. HttpClient.PostAsync gõ ứng dụng có mã thoát 0
- 24. Haskell sử dụng loại phạm vi nào?
- 25. Sử dụng Haskell để mở rộng Perl?
- 26. Mảng sử dụng như các chỉ số phải có số nguyên (hoặc boolean) gõ
- 27. Sử dụng SimpleHTTP của Haskell bằng Proxy?
- 28. Sử dụng các kiểu dữ liệu trong Haskell
- 29. Haskell có thể triển khai OSGi không?
- 30. chuyển đổi boost :: biến thể gõ
Đây là một trùng lặp: http://stackoverflow.com/questions/3375483/operating-on-a-return-from-a-maybe-that -contains-just/3375712 # 3375712 –