packages feed

egison 3.7.13 → 3.7.14

raw patch · 9 files changed

+104/−119 lines, 9 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Language.Egison.Types: NextMatchAllExpr :: EgisonExpr -> EgisonExpr -> MatchClause -> EgisonExpr
- Language.Egison.Types: NextMatchAllLambdaExpr :: EgisonExpr -> MatchClause -> EgisonExpr
- Language.Egison.Types: NextMatchExpr :: EgisonExpr -> EgisonExpr -> [MatchClause] -> EgisonExpr
- Language.Egison.Types: NextMatchLambdaExpr :: EgisonExpr -> [MatchClause] -> EgisonExpr
+ Language.Egison.Types: LaterPat :: EgisonPattern -> EgisonPattern

Files

egison.cabal view
@@ -1,5 +1,5 @@ Name:                egison-Version:             3.7.13+Version:             3.7.14 Synopsis:            Programming language with non-linear pattern-matching against non-free data Description:   An interpreter for Egison, a **pattern-matching-oriented**, purely functional programming language.
elisp/egison-mode.el view
@@ -74,11 +74,6 @@      "\\<match-lambda\\>"      "\\<match-all\\>"      "\\<match-all-lambda\\>"-     "\\<next-match\\>"-     "\\<next-match-lambda\\>"-     "\\<next-match-all\\>"-     "\\<next-match-all-lambda\\>"-     "\\<next-matcher\\>"      "\\<matcher\\>"      "\\<self\\>"      "\\<algebraic-data-matcher\\>"@@ -90,7 +85,7 @@       "\\<undefined\\>"      "\\<something\\>"-     +      "\\\.\\\.\\\."      "\\\," ;     "'"@@ -202,10 +197,6 @@         ((equal "match-lambda" name) 2)         ((equal "match-all" name) 2)         ((equal "match-all-lambda" name) 2)-        ((equal "next-match" name) 2)-        ((equal "next-match-lambda" name) 2)-        ((equal "next-match-all" name) 2)-        ((equal "next-match-all-lambda" name) 2)         ((equal "matcher" name) 2)         ((equal "algebraic-data-matcher" name) 2)         ((equal "pattern-function" name) 2)
hs-src/Language/Egison/Core.hs view
@@ -232,10 +232,7 @@   f (x, _) = x   g (Value (ScalarData (Div (Plus [Term 1 [(FunctionData fn argnames args js, 1)]]) p)), ms) =     let Env _ maybe_vwi = env in-    let fn' = case maybe_vwi of-                Nothing -> fn-                Just (VarWithIndices nameString indexList) ->-                   Just $ symbolScalarData "" $ show $ VarWithIndices nameString $ changeIndexList indexList ms in+    let fn' = maybe fn (\(VarWithIndices nameString indexList) -> Just $ symbolScalarData "" $ show $ VarWithIndices nameString $ changeIndexList indexList ms) maybe_vwi in     Value $ ScalarData $ Div (Plus [Term 1 [(FunctionData fn' argnames args js, 1)]]) p   g (x, _) = x @@ -694,12 +691,10 @@   ns <- (mapM fromEgison size'') :: EgisonM [Integer]   let Env frame maybe_vwi = env   xs <- mapM (\ms -> do-    let env' = case maybe_vwi of-                 Nothing -> env-                 Just (VarWithIndices nameString indexList) -> Env frame (Just $ VarWithIndices nameString $ changeIndexList indexList ms)+    let env' = maybe env (\(VarWithIndices nameString indexList) -> Env frame $ Just $ VarWithIndices nameString $ changeIndexList indexList ms) maybe_vwi     fn <- evalExpr env' fnExpr-    applyFunc env fn (Value (makeTuple ms)))-                (map (\ms -> map toEgison ms) (enumTensorIndices ns))+    applyFunc env fn $ Value $ makeTuple ms)+                (map (\ms -> map toEgison ms) $ enumTensorIndices ns)   fromTensor (Tensor ns (V.fromList xs) [])  evalExpr env (TensorContractExpr fnExpr tExpr) = do@@ -1027,8 +1022,7 @@                    whnf <- evalExpr env' expr                    case whnf of                      (Value (CFunc _ env arg body)) -> liftIO . writeIORef ref . WHNF $ (Value (CFunc (Just name) env arg body))-                 FunctionExpr args -> do-                   liftIO . writeIORef ref . Thunk $ evalExpr (Env frame (Just $ varToVarWithIndices name)) $ FunctionExpr args+                 FunctionExpr args -> liftIO . writeIORef ref . Thunk $ evalExpr (Env frame (Just $ varToVarWithIndices name)) $ FunctionExpr args                  _ | isVarWithIndices name -> liftIO . writeIORef ref . Thunk $ evalExpr (Env frame (Just $ varToVarWithIndices name)) expr                    | otherwise -> liftIO . writeIORef ref . Thunk $ evalExpr env' expr)             refs bindings@@ -1068,9 +1062,15 @@ processMStatesAll depth streams = do   (matches, streams') <- (\(a, b) -> (fromList a, b)) <$> (processMStatesLine depth streams >>= extractMatches)   if null (streams' ^. normalTree)-     then do matches' <- mapM (\id -> processMStatesAll 0 $ MatchingStates { _normalTree = map snd (toAscList $ (streams' ^. orderedOrTrees) M.! id), _orderedOrTrees = M.empty, _ids = [], _bool = streams' ^. bool }) $ streams' ^. ids+     then do matches' <- mapM (\id -> processMStatesAll 0 $ MatchingStates { _normalTree = convert ((streams' ^. orderedOrTrees) M.! id), _orderedOrTrees = M.empty, _ids = [], _bool = streams' ^. bool }) $ streams' ^. ids              mappend matches $ mconcat $ fromList matches'      else mappend matches $ processMStatesAll (depth + 1) streams'+ where+  convert :: Map Int [a] -> [[a]]+  convert ms = let ((start, root), ms') = M.deleteFindMin ms in+                   M.foldlWithKey (\l k x -> let k' = k - start in+                                                 if length l <= k' then l ++ (replicate (k' - length l) []) ++ [x]+                                                                   else let (xs, y:ys) = splitAt k' l in xs ++ (x:ys)) [root] ms'  processMStatesLine :: Int -> MatchingStates -> EgisonM MatchingStates processMStatesLine depth streams = do@@ -1169,6 +1169,9 @@       case result of         MNil -> return $ msingleton state2         _    -> return MNil+    MAtom (LaterPat _) _ _ -> do+      let state' = swapMState state+      processMState' state'     _ -> processMState' state  where   splitMState :: MatchingState -> (MatchingState, MatchingState)@@ -1177,6 +1180,12 @@   splitMState (MState mode env loops bindings ((MNode penv state') : trees)) =     let (state1, state2) = splitMState state'      in (MState mode env loops bindings [MNode penv state1], MState mode env loops bindings (MNode penv state2 : trees))+  swapMState :: MatchingState -> MatchingState+  swapMState (MState mode env loops bindings ((MAtom (LaterPat pattern) target matcher) : trees)) =+    MState mode env loops bindings (trees ++ [MAtom pattern target matcher])+  swapMState (MState mode env loops bindings ((MNode penv state') : trees)) =+    let state'' = swapMState state'+     in MState mode env loops bindings ((MNode penv state''):trees)  processMState' :: MatchingState -> EgisonM (MList EgisonM MatchingState) processMState' (MState _ _ _ _ []) = throwError $ EgisonBug "should not reach here (empty matching-state)"@@ -1284,11 +1293,20 @@     _ ->       case matcher of         UserMatcher _ _ _ -> do-          (patterns, targetss, matchers) <- inductiveMatch env' pattern target matcher-          mfor targetss $ \ref -> do-            targets <- evalRef ref >>= fromTupleWHNF-            let trees' = zipWith3 MAtom patterns targets matchers ++ trees-            return $ MState mode env loops bindings trees'+          case pattern of+            _ -> do+              (patterns, targetss, matchers) <- inductiveMatch env' pattern target matcher+              case (length patterns, length matchers) of+                (1,1) -> do+                  mfor targetss $ \ref -> do+                    targets <- evalRef ref >>= (\x -> return [x])+                    let trees' = zipWith3 MAtom patterns targets matchers ++ trees+                    return $ MState mode env loops bindings trees'+                _ -> do+                  mfor targetss $ \ref -> do+                    targets <- evalRef ref >>= fromTupleWHNF+                    let trees' = zipWith3 MAtom patterns targets matchers ++ trees+                    return $ MState mode env loops bindings trees'          Tuple matchers ->           case pattern of
hs-src/Language/Egison/Desugar.hs view
@@ -435,6 +435,7 @@     collectName :: EgisonPattern -> Set String    collectName (NotPat pattern) = collectName pattern+   collectName (LaterPat pattern) = collectName pattern    collectName (AndPat patterns) = collectNames patterns    collectName (TuplePat patterns) = collectNames patterns    collectName (InductivePat _ patterns) = collectNames patterns@@ -459,6 +460,7 @@ desugarPattern' (ValuePat expr) = ValuePat <$> desugar expr desugarPattern' (PredPat expr) = PredPat <$> desugar expr desugarPattern' (NotPat pattern) = NotPat <$> desugarPattern' pattern+desugarPattern' (LaterPat pattern) = LaterPat <$> desugarPattern' pattern desugarPattern' (AndPat patterns) = AndPat <$> mapM desugarPattern' patterns desugarPattern' (OrPat patterns)  =  OrPat <$> mapM desugarPattern' patterns desugarPattern' (OrderedOrPat' [pat1, pat2])  = OrderedOrPat <$> fresh <*> desugarPattern' pat1 <*> desugarPattern' pat2
hs-src/Language/Egison/Parser.hs view
@@ -122,6 +122,10 @@     fromParsecError :: ParseError -> EgisonError     fromParsecError = Parser . show +doParse' :: Parser a -> String -> a+doParse' p input = case doParse p input of+                     Right x -> x+ -- -- Expressions --@@ -140,7 +144,7 @@          <|> try (parens (do keywordDefine                              (VarWithIndices name is) <- (char '$' >> identVarWithIndices)                              body <- expr-                             return $ Define (Var name (map f is)) (WithSymbolsExpr (map g is) (TransposeExpr (CollectionExpr (map (ElementExpr . h) is)) body))))+                             return $ Define (Var name (map f is)) (WithSymbolsExpr (map g is) (TransposeExpr (CollectionExpr (map (ElementExpr . VarExpr . stringToVar . g) is)) body))))  where   f (Superscript _) = Superscript ()   f (Subscript _) = Subscript ()@@ -148,9 +152,6 @@   g (Superscript i) = i   g (Subscript i) = i   g (SupSubscript i) = i-  h (Superscript i) = (VarExpr $ stringToVar i)-  h (Subscript i) = (VarExpr $ stringToVar i)-  h (SupSubscript i) = (VarExpr $ stringToVar i)  redefineExpr :: Parser EgisonTopExpr redefineExpr = (keywordRedefine <|> keywordSet) >> Redefine <$> (char '$' >> identVar) <*> expr@@ -230,10 +231,6 @@                          <|> matchExpr                          <|> matchAllLambdaExpr                          <|> matchLambdaExpr-                         <|> nextMatchAllExpr-                         <|> nextMatchExpr-                         <|> nextMatchAllLambdaExpr-                         <|> nextMatchLambdaExpr                          <|> matcherExpr                          <|> matcherDFSExpr                          <|> seqExpr@@ -329,18 +326,6 @@ matchLambdaExpr :: Parser EgisonExpr matchLambdaExpr = keywordMatchLambda >> MatchLambdaExpr <$> expr <*> matchClauses -nextMatchAllExpr :: Parser EgisonExpr-nextMatchAllExpr = keywordNextMatchAll >> NextMatchAllExpr <$> expr <*> expr <*> matchClause--nextMatchExpr :: Parser EgisonExpr-nextMatchExpr = keywordNextMatch >> NextMatchExpr <$> expr <*> expr <*> matchClauses--nextMatchAllLambdaExpr :: Parser EgisonExpr-nextMatchAllLambdaExpr = keywordNextMatchAllLambda >> NextMatchAllLambdaExpr <$> expr <*> matchClause--nextMatchLambdaExpr :: Parser EgisonExpr-nextMatchLambdaExpr = keywordNextMatchLambda >> NextMatchLambdaExpr <$> expr <*> matchClauses- matchClauses :: Parser [MatchClause] matchClauses = braces $ sepEndBy matchClause whiteSpace @@ -540,9 +525,7 @@ generateArrayExpr = keywordGenerateArray >> GenerateArrayExpr <$> expr <*> arrayRange  arrayRange :: Parser (EgisonExpr, EgisonExpr)-arrayRange = brackets (do s <- expr-                          e <- expr-                          return (s, e))+arrayRange = brackets $ (,) <$> expr <*> expr  arrayBoundsExpr :: Parser EgisonExpr arrayBoundsExpr = keywordArrayBounds >> ArrayBoundsExpr <$> expr@@ -611,6 +594,7 @@                     <|> orPat                     <|> loopPat                     <|> letPat+                    <|> laterPat                     <|> bfsPat                     <|> dfsPat                     <|> try divPat@@ -618,7 +602,6 @@                     <|> try multPat                     <|> try dApplyPat                     <|> try pApplyPat---                    <|> powerPat                     )  pattern'' :: Parser EgisonPattern@@ -644,6 +627,9 @@ letPat :: Parser EgisonPattern letPat = keywordLet >> LetPat <$> bindings <*> pattern +laterPat :: Parser EgisonPattern+laterPat = keywordLater >> LaterPat <$> pattern+ notPat :: Parser EgisonPattern notPat = char '!' >> NotPat <$> pattern @@ -678,13 +664,10 @@ loopPat = keywordLoop >> char '$' >> LoopPat <$> identVarWithoutIndex <*> loopRange <*> pattern <*> option (NotPat WildCard) pattern  loopRange :: Parser LoopRange-loopRange = brackets (try (do s <- expr-                              e <- expr+loopRange = brackets (try (LoopRange <$> expr <*> expr <*> option WildCard pattern)+                      <|> (do s <- expr                               ep <- option WildCard pattern-                              return (LoopRange s e ep))-                 <|> (do s <- expr-                         ep <- option WildCard pattern-                         return (LoopRange s (ApplyExpr (VarExpr $ stringToVar "from") (ApplyExpr (VarExpr $ stringToVar "-'") (TupleExpr [s, (IntegerExpr 1)]))) ep)))+                              return (LoopRange s (ApplyExpr (VarExpr $ stringToVar "from") (ApplyExpr (VarExpr $ stringToVar "-'") (TupleExpr [s, (IntegerExpr 1)]))) ep)))  divPat :: Parser EgisonPattern divPat = reservedOp "/" >> DivPat <$> pattern <*> pattern@@ -696,11 +679,8 @@ multPat = reservedOp "*" >> MultPat <$> sepEndBy powerPat whiteSpace  powerPat :: Parser EgisonPattern-powerPat = try (do pat1 <- pattern-                   char '^'-                   pat2 <- pattern-                   return $ PowerPat pat1 pat2)-       <|> pattern+powerPat = try (PowerPat <$> pattern <* char '^' <*> pattern)+            <|> pattern  dfsPat :: Parser EgisonPattern dfsPat = keywordDFS >> DFSPat' <$> pattern@@ -721,7 +701,7 @@                  <?> "constant"  charExpr :: Parser EgisonExpr-charExpr = CharExpr <$> charLiteral+charExpr = CharExpr <$> oneChar  stringExpr :: Parser EgisonExpr stringExpr = StringExpr . T.pack <$> stringLiteral@@ -731,15 +711,9 @@  floatExpr :: Parser EgisonExpr floatExpr = do-  (x,y) <- try (do x <- floatLiteral'-                   y <- sign' <*> positiveFloatLiteral-                   char 'i'-                   return (x,y))-            <|> try (do y <- floatLiteral'-                        char 'i'-                        return (0,y))-            <|> try (do x <- floatLiteral'-                        return (x,0))+  (x,y) <- try ((,) <$> floatLiteral' <*> (sign' <*> positiveFloatLiteral) <* char 'i')+            <|> try ((,) 0 <$> floatLiteral' <* char 'i')+            <|> try (flip (,) 0 <$> floatLiteral')   return $ FloatExpr x y  integerExpr :: Parser EgisonExpr@@ -814,6 +788,9 @@   , "let"   , "let*"   , "with-symbols"+--  , "not"+--  , "and"+--  , "or"   , "loop"   , "match-all"   , "match"@@ -880,6 +857,7 @@ keywordNot                  = reserved "not" keywordAnd                  = reserved "and" keywordOr                   = reserved "or"+keywordLater                = reserved "later" keywordSeq                  = reserved "seq" keywordApply                = reserved "apply" keywordCApply               = reserved "capply"@@ -900,10 +878,6 @@ keywordMatchAllLambda       = reserved "match-all-lambda" keywordMatch                = reserved "match" keywordMatchLambda          = reserved "match-lambda"-keywordNextMatchAll         = reserved "next-match-all"-keywordNextMatchAllLambda   = reserved "next-match-all-lambda"-keywordNextMatch            = reserved "next-match"-keywordNextMatchLambda      = reserved "next-match-lambda" keywordMatcher              = reserved "matcher" keywordMatcherDFS           = reserved "matcher-dfs" keywordDo                   = reserved "do"@@ -955,10 +929,14 @@ stringLiteral :: Parser String stringLiteral = P.stringLiteral lexer ---charLiteral :: Parser Char---charLiteral = P.charLiteral lexer charLiteral :: Parser Char-charLiteral = string "c#" >> anyChar+charLiteral = P.charLiteral lexer++oneChar :: Parser Char+oneChar = do+  string "c#"+  x <- (char '\\' >> anyChar >>= (\x -> return ['\\', x])) <|> (anyChar >>= (\x -> return [x]))+  return $ doParse' charLiteral $ "'" ++ x ++ "'"  boolLiteral :: Parser Bool boolLiteral = char '#' >> (char 't' *> pure True <|> char 'f' *> pure False)
hs-src/Language/Egison/ParserNonS.hs view
@@ -124,6 +124,10 @@     fromParsecError :: ParseError -> EgisonError     fromParsecError = Parser . show +doParse' :: Parser a -> String -> a+doParse' p input = case doParse p input of+                     Right x -> x+ -- -- Expressions --@@ -142,7 +146,7 @@              <|> try (do (VarWithIndices name is) <- identVarWithIndices                          inSpaces $ string "=" >> notFollowedBy (string "=")                          body <- expr-                         return $ Define (Var name (map f is)) (WithSymbolsExpr (map g is) (TransposeExpr (CollectionExpr (map (ElementExpr . h) is)) body)))+                         return $ Define (Var name (map f is)) (WithSymbolsExpr (map g is) (TransposeExpr (CollectionExpr (map (ElementExpr . VarExpr . stringToVar . g) is)) body)))  where   argNames' :: Parser [Arg]   argNames' = sepEndBy argName' comma@@ -156,9 +160,6 @@   g (Superscript i) = i   g (Subscript i) = i   g (SupSubscript i) = i-  h (Superscript i) = (VarExpr $ stringToVar i)-  h (Subscript i) = (VarExpr $ stringToVar i)-  h (SupSubscript i) = (VarExpr $ stringToVar i)  testExpr :: Parser EgisonTopExpr testExpr = keywordTest >> Test <$> parens expr@@ -190,7 +191,7 @@           , [binary "+" "+" AssocLeft, binary "-" "-" AssocLeft, binary "%" "remainder" AssocLeft]           , [binary "==" "eq?" AssocLeft, binary "<=" "lte?" AssocLeft, binary "<" "lt?" AssocLeft, binary ">=" "gte?" AssocLeft, binary ">" "gt?" AssocLeft]           , [binary ":" "cons" AssocLeft, binary ".." "between" AssocLeft]-          , [binary "and" "and" AssocLeft, binary "or" "or" AssocLeft]+          , [binary "&&" "and" AssocLeft, binary "||" "or" AssocLeft]           , [binary "++" "join" AssocRight]           ]   unary "-" assoc = Prefix (try $ inSpaces (string "-") >> (return $ \x -> (makeApply (VarExpr $ stringToVar "*") [IntegerExpr (-1), x])))@@ -279,7 +280,7 @@ freshVarExpr = char '#' >> return FreshVarExpr  inductiveDataExpr :: Parser EgisonExpr-inductiveDataExpr = angles $ InductiveDataExpr <$> upperName <*> sepEndBy expr whiteSpace+inductiveDataExpr = angles $ InductiveDataExpr <$> upperName <*> sepEndBy term whiteSpace  tupleExpr :: Parser EgisonExpr tupleExpr = parens $ TupleExpr <$> sepEndBy expr comma@@ -356,8 +357,8 @@  ppPattern :: Parser PrimitivePatPattern ppPattern = P.lexeme lexer (ppWildCard+                        <|> try ppValuePat                         <|> ppPatVar-                        <|> ppValuePat                         <|> ppInductivePat                         <?> "primitive-pattren-pattern") @@ -368,7 +369,7 @@ ppPatVar = reservedOp "$" *> pure PPPatVar  ppValuePat :: Parser PrimitivePatPattern-ppValuePat = reservedOp ",$" >> PPValuePat <$> ident+ppValuePat = reservedOp "$" >> PPValuePat <$> ident  ppInductivePat :: Parser PrimitivePatPattern ppInductivePat = angles (PPInductivePat <$> lowerName <*> sepEndBy ppPattern whiteSpace)@@ -382,7 +383,7 @@                     <|> brackets ((PDConsPat <$> pdPattern <* comma <*> (char '@' *> pdPattern))                             <|> (PDSnocPat <$> (char '@' *> pdPattern) <* comma <*> pdPattern)                             <|> pure PDEmptyPat)-                    <|> angles (PDInductivePat <$> upperName <*> sepEndBy pdPattern comma)+                    <|> angles (PDInductivePat <$> upperName <*> sepEndBy pdPattern whiteSpace)                     <|> parens (PDTuplePat <$> sepEndBy pdPattern comma)                     <|> PDConstantPat <$> constantExpr                     <?> "primitive-data-pattern"@@ -443,14 +444,14 @@ binding = (,) <$> varNames' <* inSpaces (string "=") <*> expr  varNames :: Parser [String]-varNames = sepEndBy (char '$' >> ident) spaces+varNames = sepEndBy (char '$' >> ident) whiteSpace  varNames' :: Parser [Var] varNames' = return <$> identVar             <|> parens (sepEndBy identVar comma)  argNames :: Parser [Arg]-argNames = sepEndBy argName spaces+argNames = sepEndBy argName whiteSpace  argName :: Parser Arg argName = try (char '$' >> ident >>= return . ScalarArg)@@ -653,12 +654,7 @@ loopPat = keywordLoop >> parens (char '$' >> LoopPat <$> identVarWithoutIndex <*> (comma >> loopRange) <*> (comma >> pattern) <*> (comma >> option (NotPat WildCard) pattern))  loopRange :: Parser LoopRange-loopRange = brackets (try (do s <- expr-                              comma-                              e <- expr-                              comma-                              ep <- option WildCard pattern-                              return (LoopRange s e ep))+loopRange = parens (try (LoopRange <$> expr <* comma <*> expr <*> option WildCard (comma >> pattern))                  <|> (do s <- expr                          comma                          ep <- option WildCard pattern@@ -683,7 +679,7 @@                  <?> "constant"  charExpr :: Parser EgisonExpr-charExpr = CharExpr <$> charLiteral+charExpr = CharExpr <$> oneChar  stringExpr :: Parser EgisonExpr stringExpr = StringExpr . T.pack <$> stringLiteral@@ -693,15 +689,9 @@  floatExpr :: Parser EgisonExpr floatExpr = do-  (x,y) <- try (do x <- floatLiteral'-                   y <- sign' <*> positiveFloatLiteral-                   char 'i'-                   return (x,y))-            <|> try (do y <- floatLiteral'-                        char 'i'-                        return (0,y))-            <|> try (do x <- floatLiteral'-                        return (x,0))+  (x,y) <- try ((,) <$> floatLiteral' <*> (sign' <*> positiveFloatLiteral) <* char 'i')+            <|> try ((,) 0 <$> floatLiteral' <* char 'i')+            <|> try (flip (,) 0 <$> floatLiteral')   return $ FloatExpr x y  integerExpr :: Parser EgisonExpr@@ -806,7 +796,6 @@ reservedOperators :: [String] reservedOperators =   [ "$"-  , ",$"   , "_"   , "^"   , "&"@@ -898,10 +887,14 @@ stringLiteral :: Parser String stringLiteral = P.stringLiteral lexer ---charLiteral :: Parser Char---charLiteral = P.charLiteral lexer charLiteral :: Parser Char-charLiteral = string "c#" >> anyChar+charLiteral = P.charLiteral lexer++oneChar :: Parser Char+oneChar = do+  string "c#"+  x <- (char '\\' >> anyChar >>= (\x -> return ['\\', x])) <|> (anyChar >>= (\x -> return [x]))+  return $ doParse' charLiteral $ "'" ++ x ++ "'"  boolLiteral :: Parser Bool boolLiteral = char '#' >> (char 't' *> pure True <|> char 'f' *> pure False)
hs-src/Language/Egison/Types.hs view
@@ -256,11 +256,6 @@   | MatchLambdaExpr EgisonExpr [MatchClause]   | MatchAllLambdaExpr EgisonExpr [MatchClause] -  | NextMatchExpr EgisonExpr EgisonExpr [MatchClause]-  | NextMatchAllExpr EgisonExpr EgisonExpr MatchClause-  | NextMatchLambdaExpr EgisonExpr [MatchClause]-  | NextMatchAllLambdaExpr EgisonExpr MatchClause-   | MatcherExpr MatcherInfo   | MatcherDFSExpr MatcherInfo   | AlgebraicDataMatcherExpr [(String, [EgisonExpr])]@@ -338,6 +333,7 @@   | PredPat EgisonExpr   | IndexedPat EgisonPattern [EgisonExpr]   | LetPat [BindingExpr] EgisonPattern+  | LaterPat EgisonPattern   | NotPat EgisonPattern   | AndPat [EgisonPattern]   | OrPat [EgisonPattern]@@ -1211,6 +1207,7 @@   show (ApplyExpr fn (TupleExpr args)) = "(" ++ show fn ++ " " ++ unwords (map show args) ++ ")"   show (ApplyExpr fn arg) = "(" ++ show fn ++ " " ++ show arg ++ ")"   show (VectorExpr xs) = "[| " ++ unwords (map show xs) ++ " |]"+  show (WithSymbolsExpr xs e) = "(withSymbols {" ++ unwords (map show xs) ++ "} " ++ show e ++ ")"   show _ = "(not supported)"  instance Show EgisonValue where@@ -1646,7 +1643,8 @@  topDFS :: EgisonPattern -> Bool topDFS (DFSPat _ _) = True-topDFS (InductivePat _ patterns) = any topDFS patterns+topDFS (InductivePat _ (pattern:_)) = topDFS pattern+topDFS (LetPat _ pattern) = topDFS pattern topDFS _ = False  containBFS :: EgisonPattern -> Bool@@ -1666,6 +1664,7 @@ containBFS (MultPat patterns) = any containBFS patterns containBFS (PowerPat pat1 pat2) = containBFS pat1 || containBFS pat2 containBFS (DFSPat _ pattern) = containBFS pattern+containBFS (LetPat _ pattern) = containBFS pattern containBFS _ = False  --
lib/core/collection.egi view
@@ -574,7 +574,7 @@                   [(map (lambda [$i] x_i) (between 1 n))                    tgt]])]}]        [,$val []-        {[$tgt (match [val tgt] [(list a) (multiset a)]+        {[$tgt (match [(unique val) (unique tgt)] [(list a) (multiset a)]                  {[[<nil> <nil>] {[]}]                   [[<cons $x $xs> <cons ,x ,xs>] {[]}]                   [[_ _] {}]})]}]@@ -593,7 +593,7 @@ (define $unique   (lambda [$xs]     (reverse (match-all (reverse xs) (list something)-      [<join _ <cons $x !<join _ <cons ,x _>>>> x]))))+               [<join _ <cons $x !<join _ <cons ,x _>>>> x]))))  (define $unique/m   (lambda [$a $xs]
sample/n-queen.egi view
@@ -55,6 +55,10 @@                    <nil>)>       a]))) +(test (n-queen 4))+(test (n-queen 5))+(test (n-queen 6))+(test (n-queen 7)) (test (n-queen 8)) (test (n-queen 9)) (test (n-queen 10))