diff options
author | Jasper Van der Jeugt <m@jaspervdj.be> | 2018-03-13 10:40:59 -0400 |
---|---|---|
committer | Jasper Van der Jeugt <m@jaspervdj.be> | 2018-03-13 10:40:59 -0400 |
commit | 5412b90d06ed435b933a65f8f796157a54a997f4 (patch) | |
tree | 27298c0cc791e7fedc2674931022a76154abf8b8 /lib/Hakyll/Core/Identifier/Pattern | |
parent | 000627c94a4d4aedb0a4216e781f6af65936ef9c (diff) | |
download | hakyll-5412b90d06ed435b933a65f8f796157a54a997f4.tar.gz |
Fix issue with CPP and /*
Diffstat (limited to 'lib/Hakyll/Core/Identifier/Pattern')
-rw-r--r-- | lib/Hakyll/Core/Identifier/Pattern/Internal.hs | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/lib/Hakyll/Core/Identifier/Pattern/Internal.hs b/lib/Hakyll/Core/Identifier/Pattern/Internal.hs new file mode 100644 index 0000000..3c1d765 --- /dev/null +++ b/lib/Hakyll/Core/Identifier/Pattern/Internal.hs @@ -0,0 +1,92 @@ +-- | This internal module is mostly here to prevent CPP conflicting with Haskell +-- comments. +{-# LANGUAGE CPP #-} +module Hakyll.Core.Identifier.Pattern.Internal + ( GlobComponent (..) + , Pattern (..) + ) where + + +-------------------------------------------------------------------------------- +import Data.Binary (Binary (..), getWord8, putWord8) +import Data.Set (Set) + + +-------------------------------------------------------------------------------- +#if MIN_VERSION_base(4,9,0) +import Data.Semigroup (Semigroup (..)) +#endif + + +-------------------------------------------------------------------------------- +import Hakyll.Core.Identifier + + +-------------------------------------------------------------------------------- +-- | Elements of a glob pattern +data GlobComponent + = Capture + | CaptureMany + | Literal String + deriving (Eq, Show) + + +-------------------------------------------------------------------------------- +instance Binary GlobComponent where + put Capture = putWord8 0 + put CaptureMany = putWord8 1 + put (Literal s) = putWord8 2 >> put s + + get = getWord8 >>= \t -> case t of + 0 -> pure Capture + 1 -> pure CaptureMany + 2 -> Literal <$> get + _ -> error "Data.Binary.get: Invalid GlobComponent" + + +-------------------------------------------------------------------------------- +-- | Type that allows matching on identifiers +data Pattern + = Everything + | Complement Pattern + | And Pattern Pattern + | Glob [GlobComponent] + | List (Set Identifier) + | Regex String + | Version (Maybe String) + deriving (Show) + + +-------------------------------------------------------------------------------- +instance Binary Pattern where + put Everything = putWord8 0 + put (Complement p) = putWord8 1 >> put p + put (And x y) = putWord8 2 >> put x >> put y + put (Glob g) = putWord8 3 >> put g + put (List is) = putWord8 4 >> put is + put (Regex r) = putWord8 5 >> put r + put (Version v) = putWord8 6 >> put v + + get = getWord8 >>= \t -> case t of + 0 -> pure Everything + 1 -> Complement <$> get + 2 -> And <$> get <*> get + 3 -> Glob <$> get + 4 -> List <$> get + 5 -> Regex <$> get + _ -> Version <$> get + + +-------------------------------------------------------------------------------- +#if MIN_VERSION_base(4,9,0) +instance Semigroup Pattern where + (<>) = And + +instance Monoid Pattern where + mempty = Everything + mappend = (<>) +#else +instance Monoid Pattern where + mempty = Everything + mappend = And +#endif |