1 {-# LANGUAGE TemplateHaskell, OverloadedStrings, TypeFamilies #-} 2 module Model.Format.Types 3 ( Format(..) 4 , unknownFormat 5 ) where 6 7 import qualified Data.ByteString as BS 8 import Data.Function (on) 9 import Data.Int (Int16) 10 import qualified Data.Text as T 11 import Instances.TH.Lift () 12 import Language.Haskell.TH.Lift (deriveLift) 13 14 -- import Model.Kind 15 import Model.Id.Types 16 17 type instance IdType Format = Int16 18 19 data Format = Format 20 { formatId :: Id Format 21 , formatMimeType :: BS.ByteString 22 , formatExtension :: [BS.ByteString] -- TODO: nonempty list 23 , formatName :: T.Text 24 } 25 26 -- instance Kinded Format where 27 -- kindOf _ = "format" 28 29 instance Eq Format where 30 (==) = on (==) formatId 31 32 deriveLift ''Format 33 34 unknownFormat :: Format 35 unknownFormat = Format 36 { formatId = error "unknownFormat" 37 , formatMimeType = "application/octet-stream" 38 , formatExtension = [] 39 , formatName = "Unknown" 40 } 41