Mam następujący kod, ale uważam, że jest zbyt brzydki i konieczny. Czy ktoś mógłby ją przeformułować, aby był bardziej funkcjonalny? (Pomieszałem z MaybeT, ale nie mogłem sprawić, żeby to działało) Odpowiedzi na aprobaty również są mile widziane.IO i Być może interakcja z monadą
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: a follow-up pytanie: co, jeśli zarówno pred if również zwracać wyniki w ciągu IO (należy podzielić na to uwagę w osobnym pytaniu?)
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 Nie można zaprzeczyć, że uzyskanie logiki z 'IO' jest ważniejsze niż posiadanie fantazyjnego rozwiązania jednokreskowego. – leftaroundabout