blob: a23fd31ee7066118d441fd1e1a89dae0c2c32361 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ViewPatterns #-}
module Collection where
import Data.Text qualified as T
import Text.ParserCombinators.ReadP qualified as R
import Text.ParserCombinators.ReadPrec qualified as R
import Text.Read (Read (..))
newtype Collection = Collection {name :: T.Text}
deriving (Read, Eq, Show)
data CollectionItem = CollectionItem
{ collection :: Collection,
itemFileName :: FilePath
} deriving (Eq)
instance Read CollectionItem where
readPrec = R.lift $ do
(Collection . T.pack -> collection) <- R.munch (/= '/')
_ <- R.string "/"
itemFileName <- do
itemFileName <- R.munch (liftA2 (&&) (/= '.') (/= '/'))
fileExt <- R.string ".json"
pure (itemFileName <> fileExt)
pure CollectionItem {..}
instance Show CollectionItem where
show (CollectionItem {collection = Collection cn, itemFileName}) =
show (cn <> "/" <> T.pack itemFileName)
|