Fork me on GitHub

Pattern Matching List.

Durante um desenvolvimento, me deparei com necessidade de transformar uma data que estava em forma de uma lista: ["2018", "05", "10", "10", "20", "15"] em uma string formatada "2018/05/10".

Meu primeiro pensamento foi fazer uma indexedMap e depois criar uma função com vários ifs para utilizar dentro de um fold para obter a data. Depois algum tempo de análise, encontrei uma alternativa com pattern matching. Eu estava observando a documentação da função head da lista que fuciona assim:

head : List a -> Maybe a
head list =
  case list of
    x :: xs ->
      Just x

    [] ->
      Nothing

Nesse momento tive a idéia de fazer pattern-matching com os valores que eu precisava:

transformaEmData : List String -> String
transformaEmData list =
  case list of
    ano :: mes: dia:: hora :: minuto: segundo :: [] ->
      ano ++ "/" ++ mes ++ "/" ++ dia

    _ ->
      "Data inválida."

Com essa implementaçao eu consegui resolver meu problema.

social