on master help sign in
upgrade megaparsec to 6.0.2 in preparation for GHC 8.2.1 support
commit4bab7417082b3037f6f59688fc9bb41e49fe2e27 authorAgentM <agentm@themactionfaction.com> dateFri 4 Aug 2017, 01:40 (9 years ago) parent7b2ef25
17 files changed+36−42
project-m36.cabal+6−5 src/bin/TutorialD/Interpreter.hs+3−3 src/bin/TutorialD/Interpreter/Base.hs+11−9 src/bin/TutorialD/Interpreter/DataTypes/DateTime.hs+5−5 src/bin/TutorialD/Interpreter/DatabaseContextExpr.hs+1−1 src/bin/TutorialD/Interpreter/DatabaseContextIOOperator.hs−1 src/bin/TutorialD/Interpreter/Export/CSV.hs−1 src/bin/TutorialD/Interpreter/Import/BasicExamples.hs−1 src/bin/TutorialD/Interpreter/Import/CSV.hs−1 src/bin/TutorialD/Interpreter/Import/TutorialD.hs−1 src/bin/TutorialD/Interpreter/InformationOperator.hs−1 src/bin/TutorialD/Interpreter/RODatabaseContextOperator.hs−1 src/bin/TutorialD/Interpreter/RelationalExpr.hs+8−6 src/bin/TutorialD/Interpreter/SchemaOperator.hs−1 src/bin/TutorialD/Interpreter/TransGraphRelationalOperator.hs+1−1 src/bin/TutorialD/Interpreter/TransactionGraphOperator.hs−1 src/bin/TutorialD/Interpreter/Types.hs+1−3
project-m36.cabal+6−5
@@ -169,6 +169,7 @@ Executable tutd
169169 mtl,
170170 uuid,
171171 deepseq-generics,
172+ scientific,
172173 MonadRandom, MonadRandom,
173174 vector,
174175 text,
@@ -186,7 +187,7 @@ Executable tutd
186187 directory,
187188 filepath,
188189 temporary,
189− megaparsec >= 5.2.0 && < 5.3,
190+ megaparsec >= 6.0.2 && < 7.0,
190191 haskeline,
191192 random, MonadRandom,
192193 base64-bytestring,
@@ -199,7 +200,7 @@ Executable tutd
199200 TutorialD.Interpreter.DatabaseContextExpr,
200201 TutorialD.Interpreter.RODatabaseContextOperator,
201202 TutorialD.Interpreter.TransactionGraphOperator,
202− TutorialD.Interpreter.DataTypes.Interval,
203+-- TutorialD.Interpreter.DataTypes.Interval,
203204 TutorialD.Interpreter.DataTypes.DateTime,
204205 TutorialD.Interpreter.Import.BasicExamples,
205206 TutorialD.Interpreter.InformationOperator,
@@ -300,7 +301,7 @@ Test-Suite test-tutoriald-atomfunctionscript
300301 type: exitcode-stdio-1.0
301302 Other-Modules: TutorialD.Interpreter, TutorialD.Interpreter.Base, TutorialD.Interpreter.DatabaseContextExpr, TutorialD.Interpreter.DatabaseContextIOOperator, TutorialD.Interpreter.Export.Base, TutorialD.Interpreter.Export.CSV, TutorialD.Interpreter.Import.Base, TutorialD.Interpreter.Import.BasicExamples, TutorialD.Interpreter.Import.CSV, TutorialD.Interpreter.Import.TutorialD, TutorialD.Interpreter.InformationOperator, TutorialD.Interpreter.RODatabaseContextOperator, TutorialD.Interpreter.RelationalExpr, TutorialD.Interpreter.TestBase, TutorialD.Interpreter.TransGraphRelationalOperator, TutorialD.Interpreter.TransactionGraphOperator, TutorialD.Interpreter.Types, TutorialD.Interpreter.SchemaOperator
302303 main-is: test/TutorialD/Interpreter/AtomFunctionScript.hs
303− Build-Depends: base, HUnit, project-m36, uuid, containers, megaparsec, text, vector, directory, bytestring, mtl, haskeline, random, MonadRandom, semigroups
304+ Build-Depends: base, HUnit, project-m36, uuid, containers, megaparsec, text, vector, directory, bytestring, mtl, haskeline, random, MonadRandom, semigroups, time
304305 GHC-Options: -Wall
305306 Hs-Source-Dirs: ./src/bin, ./test, .
306307 CPP-Options: -DPROJECTM36_VERSION="v0.1"
@@ -311,7 +312,7 @@ Test-Suite test-tutoriald-databasecontextfunctionscript
311312 type: exitcode-stdio-1.0
312313 Other-Modules: TutorialD.Interpreter, TutorialD.Interpreter.Base, TutorialD.Interpreter.DatabaseContextExpr, TutorialD.Interpreter.DatabaseContextIOOperator, TutorialD.Interpreter.Export.Base, TutorialD.Interpreter.Export.CSV, TutorialD.Interpreter.Import.Base, TutorialD.Interpreter.Import.BasicExamples, TutorialD.Interpreter.Import.CSV, TutorialD.Interpreter.Import.TutorialD, TutorialD.Interpreter.InformationOperator, TutorialD.Interpreter.RODatabaseContextOperator, TutorialD.Interpreter.RelationalExpr, TutorialD.Interpreter.TestBase, TutorialD.Interpreter.TransGraphRelationalOperator, TutorialD.Interpreter.TransactionGraphOperator, TutorialD.Interpreter.Types, TutorialD.Interpreter.SchemaOperator
313314 main-is: test/TutorialD/Interpreter/DatabaseContextFunctionScript.hs
314− Build-Depends: base, HUnit, project-m36, uuid, containers, megaparsec, text, vector, directory, bytestring, mtl, haskeline, random, MonadRandom, semigroups
315+ Build-Depends: base, HUnit, project-m36, uuid, containers, megaparsec, text, vector, directory, bytestring, mtl, haskeline, random, MonadRandom, semigroups, time
315316 GHC-Options: -Wall
316317 Hs-Source-Dirs: ./src/bin, ./test, .
317318 CPP-Options: -DPROJECTM36_VERSION="v0.1"
@@ -443,7 +444,7 @@ Test-Suite test-websocket-server
443444 Default-Language: Haskell2010
444445 type: exitcode-stdio-1.0
445446 main-is: test/Server/WebSocket.hs
446− Build-Depends: base, HUnit, Cabal, containers, hashable, unordered-containers, mtl, vector, vector-binary-instances, time, hashable-time, bytestring, uuid, stm, deepseq, deepseq-generics, binary, parallel, cassava, attoparsec, gnuplot, directory, temporary, haskeline, megaparsec, text, base64-bytestring, data-interval, filepath, transformers, stm-containers, list-t, websockets, optparse-applicative, network, aeson, uuid-aeson, project-m36, random, MonadRandom, network-transport-tcp, semigroups
447+ Build-Depends: base, HUnit, Cabal, containers, hashable, unordered-containers, mtl, vector, vector-binary-instances, time, hashable-time, bytestring, uuid, stm, deepseq, deepseq-generics, binary, parallel, cassava, attoparsec, gnuplot, directory, temporary, haskeline, megaparsec, text, base64-bytestring, data-interval, filepath, transformers, stm-containers, list-t, websockets, optparse-applicative, network, aeson, uuid-aeson, project-m36, random, MonadRandom, network-transport-tcp, semigroups, time
447448 Other-Modules: TutorialD.Interpreter.Export.Base, TutorialD.Interpreter.Export.CSV, TutorialD.Interpreter.Import.BasicExamples, TutorialD.Interpreter.Import.CSV, TutorialD.Interpreter.InformationOperator, TutorialD.Interpreter.RODatabaseContextOperator, TutorialD.Interpreter.TransactionGraphOperator, ProjectM36.Client.Json, ProjectM36.Server.RemoteCallTypes.Json, ProjectM36.Server.WebSocket, TutorialD.Interpreter, TutorialD.Interpreter.Base, TutorialD.Interpreter.DatabaseContextExpr, TutorialD.Interpreter.Import.Base, TutorialD.Interpreter.Import.TutorialD, TutorialD.Interpreter.RelationalExpr, TutorialD.Interpreter.Types, TutorialD.Interpreter.DatabaseContextIOOperator, TutorialD.Interpreter.TransGraphRelationalOperator, TutorialD.Interpreter.SchemaOperator
448449 Default-Extensions: OverloadedStrings
449450 GHC-Options: -Wall
src/bin/TutorialD/Interpreter.hs+3−3
@@ -25,7 +25,6 @@ import qualified ProjectM36.Client as C
2525import ProjectM36.Relation (attributes)
2626
2727import Text.Megaparsec
28−import Text.Megaparsec.Text
2928import Control.Monad.State
3029import System.Console.Haskeline
3130import System.Directory (getHomeDirectory)
@@ -33,6 +32,7 @@ import qualified Data.Text as T
3332import System.IO (hPutStrLn, stderr)
3433import Data.Monoid
3534import Control.Exception
35+import Data.Void
3636
3737{-
3838context ops are read-only operations which only operate on the database context (relvars and constraints)
@@ -76,11 +76,11 @@ promptText eHeadName eSchemaName = "TutorialD (" <> transInfo <> "): "
7676 where
7777 transInfo = either (const "<unknown>") id eHeadName <> "/" <> either (const "<no schema>") id eSchemaName
7878
79−parseTutorialD :: T.Text -> Either (ParseError Char Dec) ParsedOperation
79+parseTutorialD :: T.Text -> Either (ParseError Char Void) ParsedOperation
8080parseTutorialD inputString = parse interpreterParserP "" inputString
8181
8282--only parse tutoriald which doesn't result in file I/O
83−safeParseTutorialD :: T.Text -> Either (ParseError Char Dec) ParsedOperation
83+safeParseTutorialD :: T.Text -> Either (ParseError Char Void) ParsedOperation
8484safeParseTutorialD inputString = parse safeInterpreterParserP "" inputString
8585
8686data SafeEvaluationFlag = SafeEvaluation | UnsafeEvaluation deriving (Eq)
src/bin/TutorialD/Interpreter/Base.hs+11−9
@@ -1,8 +1,8 @@
11{-# LANGUAGE DeriveGeneric, CPP #-}
22module TutorialD.Interpreter.Base where
33import Text.Megaparsec
4−import Text.Megaparsec.Text
5−import qualified Text.Megaparsec.Lexer as Lex
4+import qualified Text.Megaparsec.Char.Lexer as Lex
5+import Text.Megaparsec.Char
66import ProjectM36.Base
77import ProjectM36.AtomType
88import Data.Text hiding (count)
@@ -15,11 +15,13 @@ import System.IO
1515import ProjectM36.Relation.Show.Term
1616import GHC.Generics
1717import Data.Monoid
18−import Control.Monad (void)
1918import qualified Data.UUID as U
2019import ProjectM36.Relation
2120import Control.Monad.Random
2221import Data.List.NonEmpty as NE
22+import Data.Void
23+
24+type Parser = Parsec Void Text
2325
2426displayOpResult :: TutorialDOperatorResult -> IO ()
2527displayOpResult QuitResult = return ()
@@ -44,10 +46,10 @@ spaceConsumer = Lex.space (void spaceChar) (Lex.skipLineComment "--") (Lex.skipB
4446opChar :: Parser Char
4547opChar = oneOf (":!#$%&*+./<=>?\\^|-~" :: String)-- remove "@" so it can be used as attribute marker without spaces
4648
47−reserved :: String -> Parser ()
49+reserved :: Text -> Parser ()
4850reserved word = try (string word *> notFollowedBy opChar *> spaceConsumer)
4951
50−reservedOp :: String -> Parser ()
52+reservedOp :: Text -> Parser ()
5153reservedOp op = try (string op *> notFollowedBy opChar *> spaceConsumer)
5254
5355parens :: Parser a -> Parser a
@@ -63,8 +65,8 @@ identifier = do
6365 spaceConsumer
6466 pure (pack (istart:irest))
6567
66−symbol :: String -> Parser Text
67−symbol sym = pack <$> Lex.symbol spaceConsumer sym
68+symbol :: Text -> Parser Text
69+symbol sym = Lex.symbol spaceConsumer sym
6870
6971comma :: Parser Text
7072comma = symbol ","
@@ -90,7 +92,7 @@ whiteSpace = Token.whiteSpace lexer
9092-}
9193
9294integer :: Parser Integer
93−integer = Lex.integer
95+integer = Lex.decimal
9496
9597float :: Parser Double
9698float = Lex.float
@@ -120,7 +122,7 @@ data TutorialDOperatorResult = QuitResult |
120122 DisplayIOResult (IO ()) |
121123 DisplayRelationResult Relation |
122124 DisplayErrorResult StringType |
123− DisplayParseErrorResult Int (ParseError Char Dec) | -- Int refers to length of prompt text
125+ DisplayParseErrorResult Int (ParseError Char Void) | -- Int refers to length of prompt text
124126 QuietSuccessResult
125127 deriving (Generic)
126128
src/bin/TutorialD/Interpreter/DataTypes/DateTime.hs+5−5
@@ -1,10 +1,10 @@
11module TutorialD.Interpreter.DataTypes.DateTime where
2−import Text.Parsec
2+import Text.Megaparsec
33import ProjectM36.Base
4−import Text.Parsec.String
54import TutorialD.Interpreter.Base
65import Data.Time.Clock
76import Data.Time.Format
7+import qualified Data.Text as T
88
99dateTimeAtomP :: Parser Atom
1010dateTimeAtomP = do
@@ -12,11 +12,11 @@ dateTimeAtomP = do
1212 dateTime <- dateTimeStringP
1313 reserved "::datetime"
1414 return dateTime
15− return $ Atom dateTime'
15+ return $ DateTimeAtom dateTime'
1616
1717dateTimeStringP :: Parser UTCTime
1818dateTimeStringP = do
1919 dateTimeString <- quotedString
20− case parseTimeM False defaultTimeLocale "%Y-%m-%d %H:%M:%S" dateTimeString of
20+ case parseTimeM False defaultTimeLocale "%Y-%m-%d %H:%M:%S" (T.unpack dateTimeString) of
2121 Just utctime -> return $ (utctime :: UTCTime)
22− Nothing -> fail $ "Failed to parse datetime from " ++ dateTimeString
22+ Nothing -> fail $ "Failed to parse datetime from " ++ T.unpack dateTimeString
src/bin/TutorialD/Interpreter/DatabaseContextExpr.hs+1−1
@@ -1,6 +1,6 @@
11module TutorialD.Interpreter.DatabaseContextExpr where
22import Text.Megaparsec
3−import Text.Megaparsec.Text
3+import Text.Megaparsec.Char
44import ProjectM36.Base
55import TutorialD.Interpreter.Base
66import qualified Data.Text as T
src/bin/TutorialD/Interpreter/DatabaseContextIOOperator.hs−1
@@ -5,7 +5,6 @@ import ProjectM36.Base
55import TutorialD.Interpreter.Base
66import TutorialD.Interpreter.Types
77import Text.Megaparsec
8−import Text.Megaparsec.Text
98
109addAtomFunctionExprP :: Parser DatabaseContextIOExpr
1110addAtomFunctionExprP = do
src/bin/TutorialD/Interpreter/Export/CSV.hs−1
@@ -5,7 +5,6 @@ import TutorialD.Interpreter.RelationalExpr
55import TutorialD.Interpreter.Base
66import ProjectM36.Base
77import ProjectM36.Error
8−import Text.Megaparsec.Text
98import qualified Data.ByteString.Lazy as BS
109import Control.Exception (try)
1110import qualified Data.Text as T
src/bin/TutorialD/Interpreter/Import/BasicExamples.hs−1
@@ -4,7 +4,6 @@ import ProjectM36.DateExamples
44import ProjectM36.Base
55import ProjectM36.DatabaseContext
66import TutorialD.Interpreter.Base
7−import Text.Megaparsec.Text
87
98data ImportBasicExampleOperator = ImportBasicDateExampleOperator
109 deriving (Show)
src/bin/TutorialD/Interpreter/Import/CSV.hs−1
@@ -5,7 +5,6 @@ import ProjectM36.Error
55import ProjectM36.Relation.Parse.CSV
66import qualified Data.ByteString.Lazy as BS
77import qualified Data.Text as T
8−import Text.Megaparsec.Text
98import TutorialD.Interpreter.Base
109import Control.Exception
1110
src/bin/TutorialD/Interpreter/Import/TutorialD.hs−1
@@ -3,7 +3,6 @@ import ProjectM36.Base
33import TutorialD.Interpreter.Import.Base
44import TutorialD.Interpreter.Base
55import TutorialD.Interpreter.DatabaseContextExpr
6−import Text.Megaparsec.Text
76import Text.Megaparsec hiding (try)
87import ProjectM36.Error
98import qualified ProjectM36.Error as PM36E
src/bin/TutorialD/Interpreter/InformationOperator.hs−1
@@ -2,7 +2,6 @@
22module TutorialD.Interpreter.InformationOperator where
33import Data.Text
44import Text.Megaparsec
5−import Text.Megaparsec.Text
65import TutorialD.Interpreter.Base
76
87-- this module provides information about the current interpreter
src/bin/TutorialD/Interpreter/RODatabaseContextOperator.hs−1
@@ -5,7 +5,6 @@ import ProjectM36.Error
55import ProjectM36.InclusionDependency
66import qualified ProjectM36.Client as C
77import Text.Megaparsec
8−import Text.Megaparsec.Text
98import TutorialD.Interpreter.Base
109import TutorialD.Interpreter.RelationalExpr
1110import TutorialD.Interpreter.DatabaseContextExpr
src/bin/TutorialD/Interpreter/RelationalExpr.hs+8−6
@@ -1,10 +1,11 @@
11module TutorialD.Interpreter.RelationalExpr where
22import Text.Megaparsec
33import Text.Megaparsec.Expr
4+import Text.Megaparsec.Char
45import ProjectM36.Base
5−import Text.Megaparsec.Text
66import TutorialD.Interpreter.Base
77import TutorialD.Interpreter.Types
8+import TutorialD.Interpreter.DataTypes.DateTime
89import qualified Data.Text as T
910import qualified Data.Set as S
1011import qualified Data.Map as M
@@ -215,9 +216,10 @@ constructedAtomExprP consume = do
215216-- used only for primitive type parsing ?
216217atomP :: Parser Atom
217218atomP = stringAtomP <|>
218− doubleAtomP <|>
219− intAtomP <|>
220− boolAtomP
219+ intAtomP <|>
220+ doubleAtomP <|>
221+ boolAtomP <|>
222+ dateTimeAtomP
221223
222224functionAtomExprP :: RelationalMarkerExpr a => Parser (AtomExprBase a)
223225functionAtomExprP = do
@@ -233,11 +235,11 @@ stringAtomP :: Parser Atom
233235stringAtomP = liftA TextAtom quotedString
234236
235237doubleAtomP :: Parser Atom
236−doubleAtomP = DoubleAtom <$> (try float)
238+doubleAtomP = DoubleAtom <$> float
237239
238240intAtomP :: Parser Atom
239241intAtomP = do
240− i <- integer
242+ i <- try (integer <* notFollowedBy (char '.'))
241243 return $ IntAtom (fromIntegral i)
242244
243245boolAtomP :: Parser Atom
src/bin/TutorialD/Interpreter/SchemaOperator.hs−1
@@ -1,6 +1,5 @@
11module TutorialD.Interpreter.SchemaOperator where
22import Text.Megaparsec
3−import Text.Megaparsec.Text
43
54import ProjectM36.Base
65import ProjectM36.IsomorphicSchema
src/bin/TutorialD/Interpreter/TransGraphRelationalOperator.hs+1−1
@@ -9,7 +9,7 @@ import TutorialD.Interpreter.Base
99import TutorialD.Interpreter.RelationalExpr
1010
1111import Text.Megaparsec
12−import Text.Megaparsec.Text
12+import Text.Megaparsec.Char
1313
1414import qualified Data.Text as T
1515
src/bin/TutorialD/Interpreter/TransactionGraphOperator.hs−1
@@ -1,7 +1,6 @@
11{-# LANGUAGE GADTs #-}
22module TutorialD.Interpreter.TransactionGraphOperator where
33import TutorialD.Interpreter.Base
4−import Text.Megaparsec.Text
54import Text.Megaparsec
65import ProjectM36.TransactionGraph
76import ProjectM36.Client
src/bin/TutorialD/Interpreter/Types.hs+1−3
@@ -1,11 +1,9 @@
11--parse type and data constructors
22module TutorialD.Interpreter.Types where
33import ProjectM36.Base
4−import Text.Megaparsec.Text
54import Text.Megaparsec
65import TutorialD.Interpreter.Base
76import ProjectM36.DataTypes.Primitive
8−import qualified Data.Text as T
97
108-- | Upper case names are type names while lower case names are polymorphic typeconstructor arguments.
119-- data *Either a b* = Left a | Right b
@@ -29,7 +27,7 @@ dataConstructorDefArgP = parens (DataConstructorDefTypeConstructorArg <$> typeCo
2927-- Int, Text, etc.
3028primitiveTypeConstructorP :: Parser TypeConstructor
3129primitiveTypeConstructorP = choice (map (\(PrimitiveTypeConstructorDef name typ, _) -> do
32− tName <- try $ symbol (T.unpack name)
30+ tName <- try $ symbol name
3331 pure $ PrimitiveTypeConstructor tName typ)
3432 primitiveTypeConstructorMapping)
3533