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 +2/−2
- src/Funcons/Operations/ADTs.hs +0/−1
- src/Funcons/Operations/Characters.hs +0/−3
- src/Funcons/Operations/Eval.hs +2/−1
- src/Funcons/Operations/Expr.hs +22/−15
- src/Funcons/Operations/Floats.hs +0/−2
- src/Funcons/Operations/Sets.hs +5/−2
- src/Funcons/Operations/Values.hs +5/−1
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