Исходя из моего предыдущего вопроса: Расчетная разница между днями
Я не хочу применять функцию к списку моей пользовательской структуры данных Item
. Проблема в том, что я до сих пор не понимаю, как правильно обрабатывать IO
, поэтому вот мой код:
data Item = Item
{ name :: String
, expire :: Day
, stock :: Integer
, price :: Float
} deriving (Show)
totalLoss :: IO [Item] -> Float
totalLoss items = sum $ map loss items
loss :: Item -> Float
loss x = (price x) * fromIntegral (stock x)
Скажем так, я не могу получить только [Item]
, поэтому я должен правильно обработать IO
. Но что бы я ни делал, я все равно получаю эти ошибки:
• Couldn't match expected type ‘[IO Item]’
with actual type ‘IO [Item]’
• In the second argument of ‘map’, namely ‘items’
In the second argument of ‘($)’, namely ‘map loss items’
In the expression: sum $ map loss items
|
48 | totalLoss items = sum $ map loss items
| ^^^^^
С loss :: IO Item -> Float
это та же ошибка, а с loss :: IO [Item] -> Float
я получаю другую ошибку.
• Couldn't match expected type ‘[IO [Item]]’
with actual type ‘IO [Item]’
• In the second argument of ‘map’, namely ‘items’
In the second argument of ‘($)’, namely ‘map loss items’
In the expression: sum $ map loss items
|
48 | totalLoss items = sum $ map loss items
| ^^^^^
Как, черт возьми, я должен решить это?