       :lt
 
   """
-  @spec compare(Calendar.naive_datetime, Calendar.naive_datetime) :: :lt | :eq | :gt
+  @spec compare(Calendar.naive_datetime(), Calendar.naive_datetime()) :: :lt | :eq | :gt
   def compare(%{calendar: calendar1} = naive_datetime1, %{calendar: calendar2} = naive_datetime2) do
     if Calendar.compatible_calendars?(calendar1, calendar2) do
       case {to_iso_days(naive_datetime1), to_iso_days(naive_datetime2)} do

      ~N[2014-10-02 00:29:10]

  """
  @spec add(t, integer, System.time_unit) :: t
  def add(%NaiveDateTime{microsecond: {_, precision}, calendar: calendar} = naive_datetime,
          integer, unit \\ :second) when is_integer(integer) do
    ppd = System.convert_time_unit(86400, :second, unit)
    naive_datetime
    |> to_iso_days()
    |> Calendar.ISO.add_day_fraction_to_iso_days(integer, ppd)

      ~T[23:00:07]

  """
  @spec to_time(t) :: Time.t()
  def to_time(%NaiveDateTime{} = naive_datetime) do
    %NaiveDateTime{
      hour: hour,
      minute: minute,
      second: second,
      microsecond: microsecond,
      calendar: calendar
    } = naive_datetime

    %Time{
      hour: hour,
      minute: minute,
      second: second,
      microsecond: microsecond,
      calendar: calendar
    }
  end

  @doc """
