-- um Node é basicamente uma string, pra simplicidade do exemplo newtype Node = Node String deriving (Show) -- um grafo, em que cada Node liga outros Nodes com uma distância específica newtype Graph = Graph [(Node, [(Node, Int)])] deriving (Show) -- um type alias para um algoritmo de busca -- equivalente a uma interface de um método type GraphSearchFn = Graph -> String -> Maybe Node -- implementações da interface bfs :: GraphSearchFn bfs g v = Nothing dfs :: GraphSearchFn dfs g v = Nothing -- um ""método"" de Graph search :: Graph -> GraphSearchFn -> String -> Maybe Node search g f = f g main :: IO () main = do let graph = Graph [] let node = search graph dfs "" putStrLn $ show node return ()