fix(MIME): `OutputPath`s were duplicated due to wrong `mediaTypesFor`
authorJulien Moutinho <julm+literate-web@sourcephile.fr>
Tue, 4 Mar 2025 10:04:57 +0000 (11:04 +0100)
committerJulien Moutinho <julm+literate-web@sourcephile.fr>
Tue, 4 Mar 2025 10:04:57 +0000 (11:04 +0100)
src/Literate/Web/Types/MIME.hs

index 0f400cac8bb2e4599acb5aebc1a2881ab156a99c..77f7cabe62e31f8b208fead44ceffb15d6ad1d1d 100644 (file)
@@ -19,7 +19,7 @@ import Data.Function (($), (.))
 import Data.Functor ((<$>))
 import Data.Int (Int)
 import Data.Kind (Constraint, Type)
-import Data.List.NonEmpty (NonEmpty (..))
+import Data.List.NonEmpty (NonEmpty (..), (<|))
 import Data.Maybe (Maybe (..), isJust, maybe)
 import Data.Monoid (Monoid (..))
 import Data.Proxy (Proxy (..))
@@ -45,8 +45,6 @@ class FileExtension fmt where
 -- * Class 'MediaTypeFor'
 class (Typeable fmt, FileExtension fmt) => MediaTypeFor fmt where
   mediaTypeFor :: Proxy fmt -> MediaType
-  mediaTypesFor :: Proxy fmt -> NonEmpty MediaType
-  mediaTypesFor fmt = mediaTypeFor fmt :| []
 instance MediaTypeFor () where
   mediaTypeFor _t = mimeAny
 instance FileExtension () where
@@ -74,7 +72,6 @@ mimeAny = "*/*"
 data JSON deriving (Typeable)
 instance MediaTypeFor JSON where
   mediaTypeFor _t = charsetUTF8 $ "application" Media.// "json"
-  mediaTypesFor fmt = mediaTypeFor fmt :| ["application" Media.// "json"]
 instance FileExtension JSON where
   fileExtension = "json"
 
@@ -82,7 +79,6 @@ instance FileExtension JSON where
 data HTML deriving (Typeable)
 instance MediaTypeFor HTML where
   mediaTypeFor _t = charsetUTF8 $ "text" Media.// "html"
-  mediaTypesFor fmt = mediaTypeFor fmt :| ["text" Media.// "html"]
 instance FileExtension HTML where
   fileExtension = "html"
 
@@ -133,13 +129,11 @@ class MimeTypes (ts :: [Type]) (c :: Type -> Constraint) where
   mimeTypesMap :: NonEmpty (MediaType, MimeType c)
 
 instance (MediaTypeFor fmt, c fmt) => MimeTypes '[fmt] c where
-  mimeTypesMap = (,MimeType @c @fmt Proxy) <$> mediaTypesFor (Proxy @fmt)
+  mimeTypesMap = (mediaTypeFor (Proxy @fmt), MimeType @c @fmt Proxy) :| []
 instance (MediaTypeFor fmt, MimeTypes (t1 ': ts) c, c fmt) => MimeTypes (fmt ': t1 ': ts) c where
   mimeTypesMap =
-    ( (,MimeType @c @fmt Proxy)
-        <$> mediaTypesFor (Proxy @fmt)
-    )
-      <> mimeTypesMap @(t1 ': ts) @c
+    (mediaTypeFor (Proxy @fmt), MimeType @c @fmt Proxy)
+      <| mimeTypesMap @(t1 ': ts) @c
 
 matchAccept ::
   forall ts c.