Я пытаюсь понять, как обрабатывать ошибки вызовов в Haskell. Например: у меня есть этот график
import Data.Map (Map,empty,member,insert,keys,(!))
import Graphviz
-- | A directed graph
data Graph v = Graph
{ arcsMap :: Map v [v] -- A map associating a vertex with its successors
, labelMap :: Map v String -- The Graphviz label of each node
, styleMap :: Map v String -- The Graphviz style of each node
}deriving (Show,Eq, Ord)
И у меня есть функция
-- | Returns the successors of a vertex in a graph in ascending order
--
-- We say that `v` is a successor of `u` in a graph `G` if the arc `(u,v)`
-- belongs to `G`.
--
-- Note: Returns the empty list if the vertex does not belong to the graph.
--
-- >>> successors 1 emptyGraph
-- []
-- >>> successors 1 $ addArc (1,2) emptyGraph
-- [2]
-- >>> successors 1 $ addArcs emptyGraph [(1,2),(2,3),(1,3)]
-- [2,3]
successors :: Ord v => v -> Graph v -> [v]
successors v (Graph arcs labels styles) = arcs ! v
В документации оператора (!) Написано: «O (log n). Найдите значениена ключ. Вызывает ошибку, когда элемент не может быть найден. "
Я хочу вернуть пустой список [], когда элемент не может быть найден
Как мне справиться с этим? Большое спасибо.