"return một" là nghĩa vụ phải quấn một trong bối cảnh của một số đơn nguyên:Tại sao "trả lại Không có gì" trả lại Không có gì?
*Main> :i return
class Applicative m => Monad (m :: * -> *) where
...
return :: a -> m a
...
-- Defined in ‘GHC.Base’
Nếu tôi hỏi GHCI gì loại "return Không có gì" được, nó phù hợp với rằng:
*Main> :t return Nothing
return Nothing :: Monad m => m (Maybe a)
Nhưng nếu tôi đánh giá nó, tôi thấy không có bên ngoài Monad, chỉ là bên trong có thể:
*Main> return Nothing
Nothing
GHCi mặc định là đơn nguyên IO nếu bạn không xác định một. Nó chỉ in nội dung của một 'IO (Có thể a)' – 4castle
@ 4castle Để hơi misquote shachaf: Một 'IO (Có thể a)' chứa một 'Có thể a' trong cùng một cách mà'/bin/ls' chứa một danh sách tệp. Điều này nghe có vẻ hơi phức tạp, nhưng nó không in nội dung của 'IO (Có thể a)'. Nó đang chạy một 'IO (Có thể a)' và sau đó in kết quả của điều đó. Sự khác biệt có thể là quan trọng. –
@DavidYoung Tôi không cá nhân tìm thấy sự khác biệt là quan trọng, bởi vì đó là công việc của IO monad để biết biểu diễn bên trong của giá trị. Vì mục đích lý luận, tôi thường nghĩ về tất cả các monads là container (cho dù chúng có chứa giá trị hay không). – 4castle