module Web.Routes.Nested.FileExtListener.Types where
import qualified Data.Text as T
import Control.Applicative
import Control.Monad.Trans
import Control.Monad.Writer
import Data.Foldable hiding (elem)
import Data.Map
import Data.Monoid
import Data.Traversable
data FileExt = Html
| Css
| JavaScript
| Json
| Text
deriving (Show, Eq, Ord)
toExt :: T.Text -> Maybe FileExt
toExt x | x `elem` htmls = Just Html
| x `elem` csss = Just Css
| x `elem` javascripts = Just JavaScript
| x `elem` jsons = Just Json
| x `elem` texts = Just Text
| otherwise = Nothing
where
htmls = [".htm", ".html"]
csss = [".css"]
javascripts = [".js", ".javascript"]
jsons = [".json"]
texts = [".txt"]
newtype FileExts a = FileExts { unFileExts :: Map FileExt a }
deriving (Show, Eq, Monoid, Functor, Foldable, Traversable)
newtype FileExtListenerT r m a =
FileExtListenerT { runFileExtListenerT :: WriterT (FileExts r) m a }
deriving (Functor, Applicative, Monad, MonadIO, MonadTrans)