scrapbook-0.3.2: src/ScrapBook/Internal/Utils.hs
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE TypeOperators #-}
{-# OPTIONS_GHC -fno-warn-simplifiable-class-constraints #-}
module ScrapBook.Internal.Utils where
import RIO
import qualified RIO.Text as T
import RIO.Time
import Data.Extensible
embedM :: (Functor f, x ∈ xs) => Comp f h x -> f (h :| xs)
embedM = fmap embed . getComp
embedAssocM :: (Functor f, Associate k a xs) => Comp f h (k >: a) -> f (h :| xs)
embedAssocM = fmap embedAssoc . getComp
valid :: (a -> Bool) -> a -> Maybe a
valid p a = if p a then pure a else Nothing
toHost :: Text -> Text
toHost url = fromMaybe url
$ mappend "https://" . T.takeWhile (/= '/') <$> T.stripPrefix "https://" url
<|> mappend "http://" . T.takeWhile (/= '/') <$> T.stripPrefix "http://" url
formatTimeFromRFC822 :: Text -> Maybe Text
formatTimeFromRFC822 time = formatTimeToRFC3339 <$>
parseTimeM True defaultTimeLocale rfc822DateFormat (T.unpack time)
formatTimeToRFC3339 :: UTCTime -> Text
formatTimeToRFC3339 =
T.pack . formatTime defaultTimeLocale (iso8601DateFormat $ Just "%H:%M:%S%EZ")