import Data.Map (Map) import qualified Data.Map as Map import Control.Concurrent import Prelude hiding (lookup) -- <> -- <> -- < Name -> PhoneNumber -> IO () insert (PhoneBookState m) name number = do book <- takeMVar m putMVar m (Map.insert name number book) -- >> -- < Name -> IO (Maybe PhoneNumber) lookup (PhoneBookState m) name = do book <- takeMVar m putMVar m book return (Map.lookup name book) -- >> -- <
>= print lookup s "unknown" >>= print -- >>