Tôi có mã sau nhưng tôi cảm thấy nó quá xấu và bắt buộc. Có ai nói lại nó để có chức năng hơn không? (Tôi sai lầm với MaybeT nhưng không thể làm cho nó hoạt động) Câu trả lời áp dụng chào đón là tốt.IO và Có lẽ tương tác đơn lẻ
getString :: IO String
pred :: String -> Bool
f :: String -> String
result :: IO (Maybe String)
result = do
s <- getString
if pred s
then return $ Just $ f s
else return Nothing
EDIT: Một câu hỏi tiếp theo: những gì nếu cả hai pred và e cũng đưa ra kết quả trong vòng IO (nên tôi chia này ra thành một câu hỏi riêng biệt?)
getString :: IO String
pred :: String -> IO Bool
f :: String -> IO String
result :: IO (Maybe String)
result = do
s <- getString
b <- pred s
if b
then Just <$> f s
else return Nothing
+1 Nó không thể bị từ chối mà nhận được logic ra khỏi 'IO' là quan trọng hơn có một giải pháp một dòng ưa thích. – leftaroundabout