В документации для Data.Time.Clock Я вижу это:
Функции преобразования будут обрабатывать его как секунды. Он имеет точность 10 ^ -12 с
Какую функцию превратит NominalDiffTime
в Double
? Не повезло hoogling it
В документации для Data.Time.Clock Я вижу это:
Функции преобразования будут обрабатывать его как секунды. Он имеет точность 10 ^ -12 с
Какую функцию превратит NominalDiffTime
в Double
? Не повезло hoogling it
Вам нужно обратить больше внимания на список экземпляров для этого типа. Один из перечисленных экземпляров - Real NominalDiffTime
. Это позволяет использовать realToFrac :: (Real a, Fractional b) :: a -> b
для преобразования в Double
, так как Double
является экземпляром Fractional
.
Так как NominalDiffTime
имеет экземпляр Real
, а Double
имеет экземпляр Fractional
, вы можете использовать realToFrac
, как если бы он имел подпись типа NominalDiffTime -> Double
. Конечно, realToFrac
является более полиморфным, чем это, поэтому вам может понадобиться дать ему подсказки, какие типы вы хотите конвертировать. Но он, безусловно, способен на это преобразование, если он может определить типы.
Вы можете hoogle полностью,, просто нужно сделать подпись более общей. В этом случае вы знаете, что оба типа приближают действительные числа, так что я бы поискал. По общему признанию, для этого потребовались бы некоторые, как в этом случае: столь же разумный запрос (RealFloat a, RealFloat b) => a -> b
не дал бы вам правильный realToFrac
справа на втором месте.
Но всегда стоит попробовать более общие способы, которые могут быть определены для функции, которая вам нужна. Обычно, если у какого-либо типа есть экземпляры стандартных классов, то модуль не будет сильно беспокоить, чтобы экспортировать специализированные версии той же функциональности.
realToFrac
, в частности, является чем-то вроде шутника, который очень часто работает для числовых преобразований, возможно, 2-й наиболее часто после fromIntegral
. (Хотя, честно говоря, мне не слишком нравится эта функция, потому что математически "преобразование реального числа в дробь" довольно ужасно, но о хорошо...)