packages feed

phino 0.0.0.20 → 0.0.0.21

raw patch · 4 files changed

+22/−16 lines, 4 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Yaml: Match :: String -> Expression -> Condition
+ Yaml: Matches :: String -> Expression -> Condition

Files

phino.cabal view
@@ -1,7 +1,7 @@ cabal-version:      3.0  name:               phino-version:            0.0.0.20+version:            0.0.0.21 license:            MIT synopsis:           Command-Line Manipulator of 𝜑-Calculus Expressions description:        Please see the README on GitHub at <https://github.com/objectionary/phino#readme>
src/Condition.hs view
@@ -7,11 +7,14 @@  import Ast import Builder (buildAttribute, buildBinding)+import Control.Exception (SomeException (SomeException), evaluate)+import Control.Exception.Base (try) import Data.Aeson (FromJSON) import qualified Data.ByteString.Char8 as B import qualified Data.Map.Strict as M import Functions (buildTermFromFunction) import GHC.IO (unsafePerformIO)+import Logger (logDebug) import Matcher import Misc (allPathsIn, btsToUnescapedStr) import Pretty (prettyExpression, prettySubsts)@@ -137,10 +140,10 @@   onTau <- meetCondition' (Y.XI texpr) subst   pure [subst | not (null onExpr) && not (null onTau)] meetCondition' (Y.XI (ExDispatch expr _)) subst = meetCondition' (Y.XI expr) subst-meetCondition' (Y.Match pat (ExMeta meta)) (Subst mp) = case M.lookup meta mp of-  Just (MvExpression expr _) -> meetCondition' (Y.Match pat expr) (Subst mp)+meetCondition' (Y.Matches pat (ExMeta meta)) (Subst mp) = case M.lookup meta mp of+  Just (MvExpression expr _) -> meetCondition' (Y.Matches pat expr) (Subst mp)   _ -> pure []-meetCondition' (Y.Match pat expr) subst = do+meetCondition' (Y.Matches pat expr) subst = do   (TeBytes tgt) <- buildTermFromFunction "dataize" [Y.ArgExpression expr] subst (Program expr)   matched <- match (B.pack pat) (B.pack (btsToUnescapedStr tgt))   pure [subst | matched]@@ -151,11 +154,14 @@ meetCondition :: Y.Condition -> [Subst] -> IO [Subst] meetCondition _ [] = pure [] meetCondition cond (subst : rest) = do-  first <- meetCondition' cond subst-  next <- meetCondition cond rest-  if null first-    then pure next-    else pure (head first : next)+  met <- try (meetCondition' cond subst) :: IO (Either SomeException [Subst])+  case met of+    Right first -> do+      next <- meetCondition cond rest+      if null first+        then pure next+        else pure (head first : next)+    Left _ -> meetCondition cond rest  -- Returns Just [...] if -- 1. program matches pattern and
src/Yaml.hs view
@@ -94,10 +94,10 @@                     pure (In attr bd)                   _ -> fail "'in' expects exactly two arguments",               do-                vals <- v .: "match"+                vals <- v .: "matches"                 case vals of-                  [pat, exp] -> Match <$> parseJSON pat <*> parseJSON exp-                  _ -> fail "'match' expects exactly two arguments"+                  [pat, exp] -> Matches <$> parseJSON pat <*> parseJSON exp+                  _ -> fail "'matches' expects exactly two arguments"             ]       ) @@ -142,7 +142,7 @@   | Eq Comparable Comparable   | NF Expression   | XI Expression-  | Match String Expression+  | Matches String Expression   deriving (Generic, Show)  data ExtraArgument
test/ConditionSpec.hs view
@@ -7,17 +7,17 @@ module ConditionSpec where  import Ast (Expression, Program (Program))-import Condition (meetCondition) import Control.Monad import Data.Aeson import Data.Yaml qualified as Y import GHC.Generics-import Matcher (matchProgram) import Misc-import Pretty (prettySubsts) import System.FilePath import Test.Hspec (Spec, describe, expectationFailure, it, runIO) import Yaml qualified+import Matcher+import Condition+import Pretty  data ConditionPack = ConditionPack   { expression :: Expression,