fork(1) download
  1. -- um Node é basicamente uma string, pra simplicidade do exemplo
  2. newtype Node = Node String deriving (Show)
  3.  
  4. -- um grafo, em que cada Node liga outros Nodes com uma distância específica
  5. newtype Graph = Graph [(Node, [(Node, Int)])] deriving (Show)
  6.  
  7. -- um type alias para um algoritmo de busca
  8. -- equivalente a uma interface de um método
  9. type GraphSearchFn = Graph -> String -> Maybe Node
  10.  
  11. -- implementações da interface
  12. bfs :: GraphSearchFn
  13. bfs g v = Nothing
  14.  
  15. dfs :: GraphSearchFn
  16. dfs g v = Nothing
  17.  
  18. -- um ""método"" de Graph
  19. search :: Graph -> GraphSearchFn -> String -> Maybe Node
  20. search g f = f g
  21.  
  22. main :: IO ()
  23. main = do
  24. let graph = Graph []
  25. let node = search graph dfs ""
  26. putStrLn $ show node
  27. return ()
Success #stdin #stdout 0s 5288KB
stdin
Standard input is empty
stdout
Nothing