{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ViewPatterns #-} module Collection where import Miso.String (MisoString, toMisoString) import Text.ParserCombinators.ReadP qualified as R import Text.ParserCombinators.ReadPrec qualified as R import Text.Read (Read (..)) newtype Collection = Collection {name :: MisoString} deriving (Read, Eq, Show) data CollectionItem = CollectionItem { collection :: Collection, itemFileName :: FilePath } deriving (Eq) instance Read CollectionItem where readPrec = R.lift $ do (Collection . toMisoString -> collection) <- R.munch (/= '/') _ <- R.string "/" itemFileName <- R.munch (const True) pure CollectionItem {..} instance Show CollectionItem where show (CollectionItem {collection = Collection cn, itemFileName}) = show (cn <> "/" <> toMisoString itemFileName)