module Data.Time.Util where

import           Control.Applicative

import           Data.Function
import           Data.Monoid         (mempty)
import           Data.Monoid.Textual hiding (foldr, map)
import           Data.Time
import           Data.Time.Format    (ParseTime, defaultTimeLocale)


toString' :: (TextualMonoid t) => t -> String
toString' :: forall t. TextualMonoid t => t -> String
toString' = forall t. TextualMonoid t => (t -> String) -> t -> String
toString (forall b a. b -> (a -> b) -> Maybe a -> b
maybe String
"?" (forall a. a -> [a] -> [a]
:[]) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall t. TextualMonoid t => t -> Maybe Char
characterPrefix)

parseTimeUsing :: (TextualMonoid t, TextualMonoid t', ParseTime time) => [t] -> t' -> Maybe time
parseTimeUsing :: forall t t' time.
(TextualMonoid t, TextualMonoid t', ParseTime time) =>
[t] -> t' -> Maybe time
parseTimeUsing [t]
formats t'
t = forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
(<|>) forall a. Maybe a
Nothing forall a b. (a -> b) -> a -> b
$ forall a b. (a -> b) -> [a] -> [b]
map forall {m :: * -> *} {t} {t}.
(MonadFail m, ParseTime t, TextualMonoid t) =>
t -> m t
parse [t]
formats
    where parse :: t -> m t
parse t
format = forall (m :: * -> *) t.
(MonadFail m, ParseTime t) =>
Bool -> TimeLocale -> String -> String -> m t
parseTimeM Bool
True TimeLocale
defaultTimeLocale (forall t. TextualMonoid t => t -> String
toString' t
format) (forall t. TextualMonoid t => t -> String
toString' t'
t)