Анализ даты из строки

Haskell:
Анализ даты из строки

Как сделать:

Haskell предлагает несколько способов разбора дат, но давайте сосредоточимся на библиотеке time и на простом примере с использованием parseTimeM. Убедитесь, что у вас установлен пакет time.

import Data.Time.Format (parseTimeM, defaultTimeLocale)

main :: IO ()
main = do
  let dateString = "2023-03-21"
  let parsedDate = parseTimeM True defaultTimeLocale "%Y-%m-%d" dateString :: IO (Maybe Day)
  
  result <- parsedDate
  case result of
    Just day -> putStrLn $ "Parsed date: " ++ show day
    Nothing -> putStrLn "Failed to parse date."

-- Вывод должен быть: Parsed date: 2023-03-21

Подробнее

Исторически разбор дат обрабатывался по-разному в разных языках и библиотеках, многие из которых использовали вариации на тему шаблонов strftime из языка C. Библиотека time в Haskell следует этому подходу для обеспечения согласованности. Альтернативы time включают использование пакета old-time, который теперь считается устаревшим, или сторонних библиотек, таких как thyme или chronos.

С точки зрения реализации, разбор в Haskell является типобезопасным, отсюда использование Maybe в примере для обработки ошибок разбора. Функция parseTimeM использует вывод типов для определения возвращаемого типа, что делает ее гибкой. Понимание спецификаторов формата, таких как %Y-%m-%d для года-месяца-дня, имеет решающее значение.

Сильная система типов в Haskell гарантирует, что как только дата разобрана, абсолютно ясно и однозначно, какого она типа, что снижает количество ошибок выполнения, связанных с манипуляцией с датами. Однако эта строгость требует обработки случаев, когда входные данные не соответствуют ожидаемому шаблону, отсюда сопоставление с образцом Just и Nothing.

Смотрите также