поиск имеет тип lookup :: Ord k => k -> Map k a -> Maybe a
.Результат обернут в «Возможно», чтобы указать, что ключ может отсутствовать на карте.
Вот способ сделать это, который будет работать:
runOp :: String -> a -> a -> b
runOp key x y = case lookup key ops of
Just op -> op x y
Nothing -> error ("Couldn't find operator: " ++ key)
Это снизится, еслиключа нету.Вы также можете вернуть результат Either
или Maybe
из runOp, чтобы учесть вероятность того, что ключ отсутствует, но это зависит от вас.
Может быть определено следующим образом:
data Maybe a = Just a | Nothing
то есть он содержит либо значение результата, либо пустое значение.Как экзистенциальный философ, Хаскелл заставляет вас признать возможность Nothing
.