packages feed

funcons-values 0.1.0.7 → 0.1.0.9

raw patch · 8 files changed

+36/−27 lines, 8 filesdep ~containersdep ~textPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: containers, text

API changes (from Hackage documentation)

+ Funcons.Operations: EvalResults :: [EvalResult t] -> EvalResult t
+ Funcons.Operations: Nondeterministic :: [Result t] -> Result t
+ Funcons.Operations: choice :: [Result t] -> Result t
+ Funcons.Operations: set :: (Ord t, HasValues t) => [Values t] -> Values t
- Funcons.Operations: ascii_cons :: [Char]
+ Funcons.Operations: ascii_cons :: Name
- Funcons.Operations: isEnv :: () => Values t -> Bool
+ Funcons.Operations: isEnv :: Values t -> Bool
- Funcons.Operations: isInt :: () => Values t -> Bool
+ Funcons.Operations: isInt :: Values t -> Bool
- Funcons.Operations: isMap :: () => Values t -> Bool
+ Funcons.Operations: isMap :: Values t -> Bool
- Funcons.Operations: isNat :: () => Values t -> Bool
+ Funcons.Operations: isNat :: Values t -> Bool
- Funcons.Operations: isSet :: () => Values t -> Bool
+ Funcons.Operations: isSet :: Values t -> Bool
- Funcons.Operations: isType :: () => Values t -> Bool
+ Funcons.Operations: isType :: Values t -> Bool
- Funcons.Operations: isVec :: () => Values t -> Bool
+ Funcons.Operations: isVec :: Values t -> Bool
- Funcons.Operations: is_empty :: () => Map k a -> Bool
+ Funcons.Operations: is_empty :: Map k a -> Bool
- Funcons.Operations: none__ :: () => Values t
+ Funcons.Operations: none__ :: Values t
- Funcons.Operations: toMap :: () => Values t -> ValueMaps (Values t)
+ Funcons.Operations: toMap :: Values t -> ValueMaps (Values t)
- Funcons.Operations: traverseCTM :: (Ord b, Monad m, HasValues a, HasValues b) => (a -> m b) -> ([a] -> m [b]) -> ComputationTypes a -> m (ComputationTypes b)
+ Funcons.Operations: traverseCTM :: forall m b a. (Ord b, Monad m, HasValues a, HasValues b) => (a -> m b) -> ([a] -> m [b]) -> ComputationTypes a -> m (ComputationTypes b)

Files

funcons-values.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/  name:                funcons-values-version:             0.1.0.7+version:             0.1.0.9 synopsis:            Library providing values and operations on values in a fixed universe. description:              The PLanCompS project (<http://plancomps.org>) has developed a component-based approach to formal semantics.@@ -49,7 +49,7 @@                       ,Funcons.Operations.Internal   other-extensions:    InstanceSigs, OverloadedStrings   build-depends:       base >=4.8 && <5-                      ,containers >=0.5 && <0.6+                      ,containers >=0.5 && <= 0.6.0.1                       ,vector >=0.12                       ,bv >=0.5                       ,multiset >=0.3 && <0.4
src/Funcons/Operations/ADTs.hs view
@@ -4,7 +4,6 @@  import Funcons.Operations.Internal -import Data.Maybe (fromJust, isJust) import Data.Text (pack, unpack) import Data.String(fromString) 
src/Funcons/Operations/Characters.hs view
@@ -1,10 +1,7 @@  module Funcons.Operations.Characters where -import Funcons.Operations.Booleans (tobool) import Funcons.Operations.Internal-import Funcons.Operations.Integers-import Funcons.Operations.Bits  import Data.Char (ord,chr,isAscii) 
src/Funcons/Operations/Eval.hs view
@@ -4,11 +4,11 @@ import Funcons.Operations.Expr import Funcons.Operations.Values hiding (showArgs) -import Control.Monad import Data.List (intercalate)  data EvalResult t = Error         (OpExpr t) (Result t)                   | Success       t+                  | EvalResults   [EvalResult t]                   deriving (Show)  eval :: HasValues t => OpExpr t -> EvalResult t@@ -16,6 +16,7 @@  applyEval :: OpExpr t -> Result t -> EvalResult t applyEval expr (Normal v) = Success v+applyEval expr (Nondeterministic ress) = EvalResults (map (applyEval expr) ress) applyEval expr res = Error expr res    instance (HasValues t, Show t) => Show (OpExpr t) where
src/Funcons/Operations/Expr.hs view
@@ -7,12 +7,17 @@  type OP = String -data Result t = SortErr     String -- sort mismatch-              | DomErr      String -- domain mismatch (in case of partial op)-              | ArityErr    String-              | ProjErr     String -- cannot project to a value-              | Normal      t +data Result t = SortErr           String -- sort mismatch+              | DomErr            String -- domain mismatch (in case of partial op)+              | ArityErr          String+              | ProjErr           String -- cannot project to a value+              | Normal            t+              | Nondeterministic  [Result t]                deriving Show++choice []  = error "Nondeterministic: no choice given"+choice [t] = t+choice ts  = Nondeterministic ts   type NullaryOp t  = Result t type UnaryOp t    = t -> Result t@@ -124,11 +129,12 @@   RewritesTo _ e1 _             -> applyExpr e1  instance Functor Result where-  fmap f (SortErr err)  = SortErr err-  fmap f (ProjErr err)  = ProjErr err-  fmap f (DomErr err)   = DomErr err-  fmap f (ArityErr err) = ArityErr err-  fmap f (Normal v)     = Normal (f v)+  fmap f (SortErr err)          = SortErr err+  fmap f (ProjErr err)          = ProjErr err+  fmap f (DomErr err)           = DomErr err+  fmap f (ArityErr err)         = ArityErr err+  fmap f (Normal v)             = Normal (f v)+  fmap f (Nondeterministic vs)  = Nondeterministic (fmap (fmap f) vs)  instance Applicative Result where   pure = Normal@@ -137,11 +143,12 @@ instance Monad Result where   return = Normal   p >>= q = case p of-    SortErr err   -> SortErr err-    ProjErr err   -> ProjErr err-    DomErr err    -> DomErr err-    ArityErr err  -> ArityErr err-    Normal f      -> q f +    SortErr err           -> SortErr err+    ProjErr err           -> ProjErr err+    DomErr err            -> DomErr err+    ArityErr err          -> ArityErr err+    Normal f              -> q f +    Nondeterministic fs   -> Nondeterministic (map (>>= q) fs)  -- helper / smart constructors {-
src/Funcons/Operations/Floats.hs view
@@ -3,8 +3,6 @@ module Funcons.Operations.Floats where  import Funcons.Operations.Internal hiding (isInt)-import Funcons.Operations.Types-import Funcons.Operations.Booleans (tobool)  library :: HasValues t => Library t library = libFromList [
src/Funcons/Operations/Sets.hs view
@@ -5,6 +5,7 @@ import Funcons.Operations.Booleans import Funcons.Operations.Internal hiding (set_) +import Data.List (permutations) import qualified Data.Set as S  library :: (HasValues t, Ord t) => Library t@@ -52,7 +53,9 @@ set_elements_ = unaryOp set_elements set_elements :: HasValues t => OpExpr t -> OpExpr t set_elements = vUnaryOp "set-elements" op- where op (Set s) = Normal $ inject $ multi $map inject $ S.toList s+ where op (Set s) = Nondeterministic $ map (Normal . inject . multi +                                             . map inject) $ +                     permutations $ S.toList s        op _ = SortErr "set-elements not applied to a set"  set_size_ :: (Ord t, HasValues t) => [OpExpr t] -> OpExpr t@@ -84,7 +87,7 @@ some_element_ = unaryOp some_element some_element :: (HasValues t, Ord t) => OpExpr t -> OpExpr t some_element = vUnaryOp "some-element" op-  where op (Set s) | not (S.null s) = Normal $ inject $ S.findMax s+  where op (Set s) | not (S.null s) = choice $ map (Normal . inject) $ S.toList s                    | otherwise      = Normal $ inject null__         op _ = SortErr "some-element not applied to a set" 
src/Funcons/Operations/Values.hs view
@@ -8,7 +8,7 @@ import qualified Data.MultiSet as MS  import qualified Data.Char as C-import Data.Text (Text, pack, unpack)+import Data.Text (Text, unpack) import Data.List (intercalate) import Data.Maybe (fromJust,isJust) import Data.String@@ -42,6 +42,7 @@                 | ValSeq [t] -- represents a multitude of values         deriving (Eq,Ord,Show,Read) +ascii_cons, unicode_cons :: Name  ascii_cons = "ascii-character" unicode_cons = "unicode-character" @@ -50,6 +51,9 @@  list :: HasValues t => [Values t] -> Values t list = ADTVal "list" . map inject++set :: (Ord t, HasValues t) => [Values t] -> Values t+set = Set . S.fromList  vector :: HasValues t => [Values t] -> Values t vector = ADTVal "vector" . map inject