module MusicBrainz where import Control.Monad.Catch import Data.Text as Text -- | Cf https://musicbrainz.org/doc/MusicBrainz_Identifier . newtype MusicBrainzIdentifier = MusicBrainzIdentifier Text deriving(Eq, Ord, Read, Show) newtype InvalidMusicBrainzIdentifier = InvalidMusicBrainzIdentifier Text deriving(Eq, Ord, Read, Show) instance Exception InvalidMusicBrainzIdentifier mkMusicBrainzIdentifier :: MonadThrow m => Text -> m MusicBrainzIdentifier mkMusicBrainzIdentifier rawIdentifier = do when (Text.length rawIdentifier /= 36) $ throwM $ InvalidMusicBrainzIdentifier rawIdentifier return $ MusicBrainzIdentifier rawIdentifier