diff --git a/buuka.cabal b/buuka.cabal index bd50b4a..9657d69 100644 --- a/buuka.cabal +++ b/buuka.cabal @@ -59,6 +59,7 @@ library , text , lens , hashable + , regex-tdfa hs-source-dirs: src executable buuka diff --git a/default.nix b/default.nix index 089e275..795a5dd 100644 --- a/default.nix +++ b/default.nix @@ -1,8 +1,8 @@ { mkDerivation, aeson, base, bytestring, containers , deriving-compat, exceptions, filepath, hashable, hashids , hedgehog, hedgehog-corpus, lens, mtl, optparse-applicative -, stdenv, tasty, tasty-hedgehog, tasty-hunit, text, transformers -, unliftio, vector, yaml +, regex-tdfa, stdenv, tasty, tasty-hedgehog, tasty-hunit, text +, transformers, unliftio, vector, yaml }: mkDerivation { pname = "buuka"; @@ -12,7 +12,7 @@ mkDerivation { isExecutable = true; libraryHaskellDepends = [ aeson base bytestring containers exceptions filepath hashable - hashids lens mtl text transformers unliftio vector yaml + hashids lens mtl regex-tdfa text transformers unliftio vector yaml ]; executableHaskellDepends = [ base optparse-applicative unliftio ]; testHaskellDepends = [ diff --git a/src/Data/Query.hs b/src/Data/Query.hs index 4ccd18b..747e47c 100644 --- a/src/Data/Query.hs +++ b/src/Data/Query.hs @@ -21,6 +21,9 @@ import Data.Buuka import Data.List (isPrefixOf, isSuffixOf) +import Text.Regex.TDFA + ((=~)) + import Data.Functor.Foldable (Fix(..)) @@ -31,6 +34,7 @@ data Field a where data QueryF f where StartsWith :: Field String -> String -> QueryF f EndsWith :: Field String -> String -> QueryF f + Regex :: Field String -> String -> QueryF f And :: f -> f -> QueryF f deriving instance Functor QueryF @@ -52,4 +56,6 @@ evaluate = \case EndsWith Url x -> \BuukaEntry{url=URL u} -> x `isSuffixOf` u StartsWith Title x -> \BuukaEntry{title=t} -> maybe False (x `isPrefixOf`) t EndsWith Title x -> \BuukaEntry{title=t} -> maybe False (x `isSuffixOf`) t + Regex Url x -> \BuukaEntry{url=URL u} -> u =~ x + Regex Title x -> \BuukaEntry{title=t} -> maybe False (=~ x) t And a b -> \e -> a e && b e