1 {-# LANGUAGE TemplateHaskell, OverloadedStrings, TypeFamilies #-} 2 module Databrary.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 Data.Ord (comparing) 11 import qualified Data.Text as T 12 import Instances.TH.Lift () 13 import Language.Haskell.TH.Lift (deriveLift) 14 15 import Databrary.Model.Kind 16 import Databrary.Model.Id.Types 17 18 type instance IdType Format = Int16 19 20 data Format = Format 21 { formatId :: Id Format 22 , formatMimeType :: BS.ByteString 23 , formatExtension :: [BS.ByteString] -- TODO: nonempty list 24 , formatName :: T.Text 25 } 26 -- deriving (Show) 27 28 instance Kinded Format where 29 kindOf _ = "format" 30 31 instance Eq Format where 32 (==) = on (==) formatId 33 (/=) = on (/=) formatId 34 35 instance Ord Format where 36 compare = comparing formatId 37 38 deriveLift ''Format 39 40 unknownFormat :: Format 41 unknownFormat = Format 42 { formatId = error "unknownFormat" 43 , formatMimeType = "application/octet-stream" 44 , formatExtension = [] 45 , formatName = "Unknown" 46 } 47 48 ERROR: ("",8,Loc 48 1,[(Loc 51 3,IsTicked),(Loc 51 3,TopLevelDecl False 1)],[(Loc 48 22,Loc 48 47,NotTicked),(Loc 49 23,Loc 49 24,NotTicked),(Loc 50 18,Loc 50 26,NotTicked)])