packages feed

egison 3.2.2 → 3.2.3

raw patch · 6 files changed

+27/−43 lines, 6 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Language.Egison.Types: LoopContextVariable :: Binding -> String -> EgisonPattern -> EgisonPattern -> LoopContext
+ Language.Egison.Types: LoopContextVariable :: Binding -> EgisonPattern -> EgisonPattern -> EgisonPattern -> LoopContext
- Language.Egison.Types: LoopRangeVariable :: EgisonExpr -> String -> LoopRange
+ Language.Egison.Types: LoopRangeVariable :: EgisonExpr -> EgisonPattern -> LoopRange

Files

egison.cabal view
@@ -1,5 +1,5 @@ Name:                egison-Version:             3.2.2+Version:             3.2.3 Synopsis:            The programming language with non-linear pattern-matching against unfree data Description:         An interpreter for Egison, the programming langugage that realized non-linear pattern-matching with unfree data types.                      With Egison, you can represent pattern-matching with unfree data types intuitively,@@ -18,9 +18,13 @@ Extra-Source-Files:  benchmark/Benchmark.hs  Data-files:          lib/core/base.egi lib/core/number.egi lib/core/collection.egi-                     lib/tree/tree.egi lib/tree/xml.egi lib/math/prime.egi+                     lib/tree/xml.egi lib/math/prime.egi                      elisp/egison-mode.el +source-repository head+  type: git+  location: https://github.com/egisatoshi/egison3.git+   Library   Build-Depends:   base >= 4.0 && < 5, array, random, containers, unordered-containers, haskeline, transformers, mtl, parsec >= 3.0, directory, ghc, ghc-paths, strict-io, bytestring   Hs-Source-Dirs:  hs-src
hs-src/Language/Egison/Core.hs view
@@ -443,13 +443,13 @@           startNumRef <- liftIO . newIORef . WHNF $ Value $ Integer startNum           let loops' = LoopContextConstant (name, startNumRef) endNum pat pat' : loops           return $ msingleton $ MState env loops' bindings (MAtom pat target matcher : trees)-    LoopPat name (LoopRangeVariable start lastName) pat pat' -> do+    LoopPat name (LoopRangeVariable start lastNumPat) pat pat' -> do       startNum' <- evalExpr' env' start       startNum <- extractInteger startNum'       startNumRef <- liftIO . newIORef . WHNF $ Value $ Integer startNum       lastNumRef <- liftIO . newIORef . WHNF $ Value $ Integer (startNum - 1)-      return $ fromList [MState env loops ((lastName, lastNumRef):bindings) ((MAtom pat' target matcher):trees),-                         MState env ((LoopContextVariable (name, startNumRef) lastName pat pat'):loops) bindings ((MAtom pat target matcher):trees)]+      return $ fromList [MState env loops bindings (MAtom lastNumPat lastNumRef (Value Something) : MAtom pat' target matcher : trees),+                         MState env (LoopContextVariable (name, startNumRef) lastNumPat pat pat' : loops) bindings (MAtom pat target matcher : trees)]     ContPat ->       case loops of         [] -> throwError $ strMsg "cannot use cont pattern except in loop pattern"@@ -463,13 +463,13 @@               nextNumRef <- liftIO . newIORef . WHNF $ Value $ Integer nextNum               let loops' = LoopContextConstant (name, nextNumRef) endNum pat pat' : loops                return $ msingleton $ MState env loops' bindings (MAtom pat target matcher : trees)-        LoopContextVariable (name, startNumRef) lastName pat pat' : loops -> do+        LoopContextVariable (name, startNumRef) lastNumPat pat pat' : loops -> do           startNum' <- evalRef' startNumRef           startNum <- extractInteger startNum'           let nextNum = startNum + 1           nextNumRef <- liftIO . newIORef . WHNF $ Value $ Integer nextNum-          let loops' = LoopContextVariable (name, nextNumRef) lastName pat pat' : loops -          return $ fromList [MState env loops ((lastName, startNumRef):bindings) (MAtom pat' target matcher : trees),+          let loops' = LoopContextVariable (name, nextNumRef) lastNumPat pat pat' : loops +          return $ fromList [MState env loops bindings (MAtom lastNumPat startNumRef (Value Something) : MAtom pat' target matcher : trees),                              MState env loops' bindings (MAtom pat target matcher : trees)]                TuplePat patterns -> do
hs-src/Language/Egison/Parser.hs view
@@ -384,8 +384,8 @@ loopPat = keywordLoop >> LoopPat <$> varName <*> loopRange <*> pattern <*> option (NotPat WildCard) pattern  loopRange :: Parser LoopRange-loopRange = brackets ((try $ LoopRangeConstant <$> expr <*> expr)-                      <|> LoopRangeVariable  <$> expr <*> varName)+loopRange = brackets ((try $ LoopRangeConstant <$> expr <*> (reservedOp "," >> expr))+                      <|> LoopRangeVariable  <$> expr <*> pattern)  -- Constants 
hs-src/Language/Egison/Types.hs view
@@ -109,7 +109,7 @@  data LoopRange =     LoopRangeConstant EgisonExpr EgisonExpr-  | LoopRangeVariable EgisonExpr String+  | LoopRangeVariable EgisonExpr EgisonPattern  deriving (Show)  data PrimitivePatPattern =@@ -172,7 +172,15 @@   show (InductiveData name []) = "<" ++ name ++ ">"   show (InductiveData name vals) = "<" ++ name ++ " " ++ unwords (map show vals) ++ ">"   show (Tuple vals) = "[" ++ unwords (map show vals) ++ "]"-  show (Collection vals) = "{" ++ unwords (map show (toList vals)) ++ "}"+  show (Collection vals) = if Sq.null vals+                             then "{}"+                             else if all isChar (toList vals)+                                    then "\"" ++ map (\(Char c) -> c) (toList vals) ++ "\""+                                    else "{" ++ unwords (map show (toList vals)) ++ "}"+                                   where+                                     isChar :: EgisonValue -> Bool+                                     isChar (Char _) = True+                                     isChar _ = False   show (Array vals) = "[|" ++ unwords (map show $ IntMap.elems vals) ++ "|]"   show (IntHash hash) = "{|" ++ unwords (map (\(key, val) -> "[" ++ show key ++ " " ++ show val ++ "]") $ HashMap.toList hash) ++ "|}"   show (StrHash hash) = "{|" ++ unwords (map (\(key, val) -> "[\"" ++ B.unpack key ++ "\" " ++ show val ++ "]") $ HashMap.toList hash) ++ "|}"@@ -325,7 +333,7 @@  data LoopContext =     LoopContextConstant Binding Integer EgisonPattern EgisonPattern-  | LoopContextVariable Binding String EgisonPattern EgisonPattern+  | LoopContextVariable Binding EgisonPattern EgisonPattern EgisonPattern  -- -- Errors@@ -458,4 +466,3 @@  mfor :: Monad m => MList m a -> (a -> m b) -> m (MList m b) mfor = flip mmap-
lib/core/collection.egi view
@@ -22,7 +22,7 @@        [<join ,$pxs $> [(list a)]         {[$tgt (match-all [pxs tgt] [(list a) (list a)]                  [[(loop $i [1 $n] <cons $xa_i ...> <nil>)-                   (loop $i [1 n] <cons ,xa_i ...> $rs)]+                   (loop $i [1 ,n] <cons ,xa_i ...> $rs)]                   rs])]}]        [<join $ $> [(list a) (list a)]         {[$tgt (match-all tgt (list a)@@ -30,7 +30,7 @@        [<nioj ,$pxs $> [(list a)]         {[$tgt (match-all [pxs tgt] [(list a) (list a)]                  [[(loop $i [1 $n] <snoc $xa_i ...> <nil>)-                   (loop $i [1 n] <snoc ,xa_i ...> $rs)]+                   (loop $i [1 ,n] <snoc ,xa_i ...> $rs)]                   rs])]}]        [<nioj $ $> [(list a) (list a)]         {[$tgt (match-all tgt (list a)
− lib/tree/tree.egi
@@ -1,27 +0,0 @@-(define $b-tree-  (lambda [$a $b]-    (algebraic-data-matcher-      {<leaf b> <node (b-tree a b) (b-tree a b)>})))--(define $tree-  (lambda [$a $b]-    (matcher-      {[,$val []-        {[$tgt (match [val tgt] [(tree a b) (tree a b)]-                 {[[<lnode $x $ts> <lnode ,x ,ts>] {[]}]-                  [[_ _] {}]})]}]-       [<leaf $> b-        {[<Leaf $x> {x}]-         [_ {}]}]-       [<lnode $ $> [a (list (tree a b))] ; Node whose children are seen as a list.-        {[<Node $x $ts> {[x ts]}]-         [_ {}]}]-       [<mnode $ $> [a (multiset (tree a b))] ; Node whose children are seen as a multiset.-        {[<Node $x $ts> {[x ts]}]-         [_ {}]}]-       [<descendant $> [(tree a b)]-        {[$t {t @(match-all t (tree a b)-                   [<mnode _ <cons <descendant $x> _>> x])}]}]-       [$ [something]-        {[$tgt {tgt}]}]-       })))