packages feed

egison 3.5.0 → 3.5.1

raw patch · 6 files changed

+26/−47 lines, 6 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Language.Egison.Types: LoopExpr :: String -> LoopRange -> EgisonExpr -> EgisonExpr -> EgisonExpr
- Language.Egison.Types: LoopExprContext :: Binding -> ObjectRef -> EgisonExpr -> EgisonExpr -> LoopExprContext
- Language.Egison.Types: data LoopExprContext
- Language.Egison.Types: instance Show LoopExprContext
- Language.Egison.Types: type Env = ([LoopExprContext], [HashMap Var ObjectRef])
+ Language.Egison.Types: type Env = [HashMap Var ObjectRef]

Files

egison.cabal view
@@ -1,5 +1,5 @@ Name:                egison-Version:             3.5.0+Version:             3.5.1 Synopsis:            Programming language with non-linear pattern-matching against unfree data Description:   An interpreter for Egison, the programming langugage that realized non-linear pattern-matching against unfree data types.
hs-src/Language/Egison/Core.hs view
@@ -169,7 +169,7 @@  evalExpr env (ArrayExpr exprs) = do   refs' <- mapM (newObjectRef env) exprs-  return . Intermediate . IArray $ Array.listArray (0, toInteger ((length exprs) - 1)) refs'+  return . Intermediate . IArray $ Array.listArray (1, toInteger (length exprs)) refs'  evalExpr env (HashExpr assocs) = do   let (keyExprs, exprs) = unzip assocs@@ -203,8 +203,8 @@  evalExpr env (IndexedExpr expr indices) = do   array <- evalExpr env expr-  indices <- mapM (evalExprDeep env) indices-  refArray array indices+  indices' <- mapM (evalExprDeep env) indices+  refArray array indices'  evalExpr env (LambdaExpr names expr) = return . Value $ Func env names expr @@ -288,27 +288,6 @@   evalExprDeep env expr1   evalExpr env expr2 -evalExpr env@(loopCxts, frames) (LoopExpr name (LoopRange start end WildCard) expr1 expr2) = do-  startNum <- evalExpr env start >>= fromWHNF-  startNumRef <- newEvalutedObjectRef $ Value $ Integer startNum-  end' <- evalExpr env end-  endRef <- newEvalutedObjectRef end'-  endNum <- evalRef endRef >>= fromWHNF-  if startNum > endNum-    then evalExpr (loopCxts, frames) expr2-    else evalExpr (((LoopExprContext (name, startNumRef) endRef expr1 expr2):loopCxts), frames) expr1--evalExpr env@(loopCxts, frames) ContExpr = do-  case loopCxts of-    [] -> throwError $ strMsg "cannot use cont expr except in loop expr"-    ((LoopExprContext (name, startNumRef) endRef expr1 expr2):loopCxts') -> do-      startNum <- evalRef startNumRef >>= fromWHNF-      nextNumRef <- newEvalutedObjectRef $ Value $ Integer (startNum + 1)-      endNum <- evalRef endRef >>= fromWHNF-      if startNum >= endNum-       then evalExpr (loopCxts', frames) expr2-       else evalExpr (((LoopExprContext (name, nextNumRef) endRef expr1 expr2):loopCxts'), frames) expr1- evalExpr env (ApplyExpr func arg) = do   func <- evalExpr env func   arg <- evalExpr env arg@@ -343,8 +322,8 @@   evalExpr env expr >>= arraySize   where     arraySize :: WHNFData -> EgisonM WHNFData-    arraySize (Intermediate (IArray arr)) = return . Value . toEgison $ (snd $ Array.bounds arr) + 1-    arraySize (Value (Array arr))         = return . Value . toEgison $ (snd $ Array.bounds arr) + 1+    arraySize (Intermediate (IArray arr)) = return . Value . toEgison $ snd $ Array.bounds arr+    arraySize (Value (Array arr))         = return . Value . toEgison $ snd $ Array.bounds arr     arraySize val                          = throwError $ TypeMismatch "array" val  evalExpr _ SomethingExpr = return $ Value Something@@ -418,7 +397,7 @@ generateArray env name sizeExpr expr = do   size <- evalExpr env sizeExpr >>= fromWHNF >>= return . fromInteger   elems <- mapM genElem (enumFromTo 1 size)-  return $ Intermediate $ IArray $ Array.listArray (0, size - 1) elems+  return $ Intermediate $ IArray $ Array.listArray (1, size) elems   where     genElem :: Integer -> EgisonM ObjectRef     genElem i = do env' <- bindEnv env name $ toInteger i
hs-src/Language/Egison/Parser.hs view
@@ -184,7 +184,6 @@                          <|> matcherBFSExpr                          <|> matcherDFSExpr                          <|> seqExpr-                         <|> loopExpr                          <|> applyExpr                          <|> algebraicDataMatcherExpr                          <|> generateArrayExpr@@ -352,9 +351,6 @@  seqExpr :: Parser EgisonExpr seqExpr = keywordSeq >> SeqExpr <$> expr <*> expr--loopExpr :: Parser EgisonExpr-loopExpr = keywordLoop >> LoopExpr <$> varName <*> loopRange <*> expr <*> expr  contExpr :: Parser EgisonExpr contExpr = reservedOp "..." >> pure ContExpr
hs-src/Language/Egison/Types.hs view
@@ -42,7 +42,6 @@     , nullEnv     , extendEnv     , refVar-    , LoopExprContext (..)     -- * Pattern matching     , Match     , PMMode (..)@@ -162,7 +161,6 @@   | IoExpr EgisonExpr        | SeqExpr EgisonExpr EgisonExpr-  | LoopExpr String LoopRange EgisonExpr EgisonExpr   | ContExpr   | ApplyExpr EgisonExpr EgisonExpr @@ -514,22 +512,19 @@ -- Environment -- -type Env = ([LoopExprContext], [HashMap Var ObjectRef])+type Env = [HashMap Var ObjectRef] type Var = String type Binding = (Var, ObjectRef)  nullEnv :: Env-nullEnv = ([], [])+nullEnv = []  extendEnv :: Env -> [Binding] -> Env-extendEnv env = ([],) . (: (snd env)) . HashMap.fromList+extendEnv env = (: env) . HashMap.fromList  refVar :: Env -> Var -> EgisonM ObjectRef refVar env var = maybe (throwError $ UnboundVariable var) return-                       (msum $ map (HashMap.lookup var) (snd (extendEnv env (map (\(LoopExprContext binding _ _ _) -> binding) (fst env)))))--data LoopExprContext = LoopExprContext Binding ObjectRef EgisonExpr EgisonExpr- deriving (Show)+                       (msum $ map (HashMap.lookup var) env)  -- -- Pattern Match
lib/core/base.egi view
@@ -55,3 +55,7 @@   (lambda [$f $g $h]     (lambda $x       (apply h (apply g (apply f x))))))++(define $ref+  (lambda [$xa $i]+    (array-ref xa i)))
lib/core/collection.egi view
@@ -26,10 +26,12 @@          [_ {}]}]        [<join $ $> [(list a) (list a)]         {[$tgt (match-all tgt (list a)-                 [(loop $i [1 $n] <cons $xa_i ...> $rs) [(loop $i [1 n] {xa_i @...} {}) rs]])]}]+                 [(loop $i [1 $n] <cons $xa_i ...> $rs) [(foldr (lambda [$i $r] {xa_i @r}) {} (between 1 n))+                                                         rs]])]}]        [<nioj $ $> [(list a) (list a)]         {[$tgt (match-all tgt (list a)-                 [(loop $i [1 $n] <snoc $xa_i ...> $rs) [(loop $i [1 n] {xa_i @...} {}) rs]])]}]+                 [(loop $i [1 $n] <snoc $xa_i ...> $rs) [(foldr (lambda [$i $r] {xa_i @r}) {} (between 1 n))+                                                         rs]])]}]        [$ [something]         {[$tgt {tgt}]}]        })))@@ -48,10 +50,12 @@        [<join $ <cons ,$px $>> [(ordered-list a) (ordered-list a)]         {[{} {}]          [$tgt (match-all tgt (list a)-                 [(loop $i [1 $n] <cons (& ?(lt? $ px) $xa_i) ...> <cons ,px $rs>) [(loop $i [1 n] {xa_i @...} {}) rs]])]}]+                 [(loop $i [1 $n] <cons (& ?(lt? $ px) $xa_i) ...> <cons ,px $rs>) [(foldr (lambda [$i $r] {xa_i @r}) {} (between 1 n))+                                                                                    rs]])]}]        [<join $ $> [(ordered-list a) (ordered-list a)]         {[$tgt (match-all tgt (list a)-                 [(loop $i [1 $n] <cons $xa_i ...> $rs) [(loop $i [1 n] {xa_i @...} {}) rs]])]}]+                 [(loop $i [1 $n] <cons $xa_i ...> $rs) [(foldr (lambda [$i $r] {xa_i @r}) {} (between 1 n))+                                                         rs]])]}]        [<cons ,$px $> [(ordered-list a)]         {[{$x @$xs} (if (gt? x px)                       {}@@ -62,7 +66,8 @@          [_ {}]}]        [<nioj $ $> [(ordered-list a) (ordered-list a)]         {[$tgt (match-all tgt (list a)-                 [(loop $i [1 $n] <snoc $xa_i ...> $rs) [(loop $i [1 n] {xa_i @...} {}) rs]])]}]+                 [(loop $i [1 $n] <snoc $xa_i ...> $rs) [(foldr (lambda [$i $r] {xa_i @r}) {} (between 1 n))+                                                         rs]])]}]        [<snoc ,$px $> [a (ordered-list a)]         {[{@$xs $x} (if (lt? x px)                       {}@@ -90,7 +95,7 @@       {s}       (if (lt? s e)         {s @(between (+ s 1) e)}-        {s @(between (- s 1) e)}))))+        {}))))  (define $from   (lambda [$s]