on master help sign in
conditionalize API changes in megaparsec 6 to support GHC 8.2.2 stackage LTS
commitbabd43167fb0395f7f3f327c26d5883fc39656e1 authorAgentM <agentm@themactionfaction.com> dateTue 30 Jan 2018, 23:21 (9 years ago) parentf4cf770
18 files changed+61−42
project-m36.cabal+3−3 src/bin/ProjectM36/Server/WebSocket.hs+1−1 src/bin/TutorialD/Interpreter.hs+2−4 src/bin/TutorialD/Interpreter/Base.hs+44−5 src/bin/TutorialD/Interpreter/DatabaseContextExpr.hs−2 src/bin/TutorialD/Interpreter/DatabaseContextIOOperator.hs+1−4 src/bin/TutorialD/Interpreter/Export/CSV.hs+1−2 src/bin/TutorialD/Interpreter/Import/BasicExamples.hs+4 src/bin/TutorialD/Interpreter/Import/CSV.hs+2−2 src/bin/TutorialD/Interpreter/Import/TutorialD.hs+1−3 src/bin/TutorialD/Interpreter/InformationOperator.hs−1 src/bin/TutorialD/Interpreter/RODatabaseContextOperator.hs−2 src/bin/TutorialD/Interpreter/RelationalExpr.hs−1 src/bin/TutorialD/Interpreter/SchemaOperator.hs−2 src/bin/TutorialD/Interpreter/TransGraphRelationalOperator.hs−3 src/bin/TutorialD/Interpreter/TransactionGraphOperator.hs−2 src/bin/TutorialD/Interpreter/Types.hs+1−3 src/bin/benchmark/Handles.hs+1−2
project-m36.cabal+3−3
@@ -71,9 +71,9 @@ Library
7171 ,http-api-data
7272--needed for remote access
7373 ,distributed-process-client-server >= 0.2.3
74− ,distributed-process >= 0.7.3
74+ ,distributed-process >= 0.7.2
7575 ,distributed-process-extras >= 0.3.2
76− ,distributed-process-async >= 0.2.4
76+ ,distributed-process-async >= 0.2.4.1
7777 ,network-transport-tcp >= 0.6.0
7878 ,network-transport
7979 ,list-t
@@ -194,7 +194,7 @@ Executable tutd
194194 directory,
195195 filepath,
196196 temporary,
197− megaparsec >= 5.2.0 && < 5.4,
197+ megaparsec >= 5.2.0 && < 7,
198198 haskeline,
199199 random, MonadRandom,
200200 base64-bytestring,
src/bin/ProjectM36/Server/WebSocket.hs+1−1
@@ -14,7 +14,7 @@ import ProjectM36.Relation.Show.Term
1414import ProjectM36.Relation.Show.HTML
1515import Data.Aeson
1616import TutorialD.Interpreter
17−import TutorialD.Interpreter.Base
17+import TutorialD.Interpreter.Base (TutorialDOperatorResult(..))
1818import ProjectM36.Client
1919import Control.Exception
2020import Data.Attoparsec.Text
src/bin/TutorialD/Interpreter.hs+2−4
@@ -24,8 +24,6 @@ import ProjectM36.TransactionGraph
2424import qualified ProjectM36.Client as C
2525import ProjectM36.Relation (attributes)
2626
27−import Text.Megaparsec
28−import Text.Megaparsec.Text
2927import System.Console.Haskeline
3028import System.Directory (getHomeDirectory)
3129import qualified Data.Text as T
@@ -79,11 +77,11 @@ promptText eHeadName eSchemaName = "TutorialD (" <> transInfo <> "): "
7977 where
8078 transInfo = either (const "<unknown>") id eHeadName <> "/" <> either (const "<no schema>") id eSchemaName
8179
82−parseTutorialD :: T.Text -> Either (ParseError Char Dec) ParsedOperation
80+parseTutorialD :: T.Text -> Either ParserError ParsedOperation
8381parseTutorialD = parse interpreterParserP ""
8482
8583--only parse tutoriald which doesn't result in file I/O
86−safeParseTutorialD :: T.Text -> Either (ParseError Char Dec) ParsedOperation
84+safeParseTutorialD :: T.Text -> Either ParserError ParsedOperation
8785safeParseTutorialD = parse safeInterpreterParserP ""
8886
8987data SafeEvaluationFlag = SafeEvaluation | UnsafeEvaluation deriving (Eq)
src/bin/TutorialD/Interpreter/Base.hs+44−5
@@ -1,12 +1,30 @@
11{-# LANGUAGE DeriveGeneric, CPP #-}
2−module TutorialD.Interpreter.Base where
2+module TutorialD.Interpreter.Base (
3+ module TutorialD.Interpreter.Base,
4+ module Text.Megaparsec,
5+#if MIN_VERSION_megaparsec(6,0,0)
6+ module Text.Megaparsec.Char,
7+ module Control.Applicative
8+#else
9+ module Text.Megaparsec.Text
10+#endif
11+ )
12+ where
313import ProjectM36.Base
414import ProjectM36.AtomType
515import ProjectM36.Relation
616
17+#if MIN_VERSION_megaparsec(6,0,0)
18+import Text.Megaparsec.Char
19+import qualified Text.Megaparsec.Char.Lexer as Lex
720import Text.Megaparsec
21+import Data.Void
22+import Control.Applicative
23+#else
824import Text.Megaparsec.Text
925import qualified Text.Megaparsec.Lexer as Lex
26+#endif
27+
1028import Data.Text hiding (count)
1129import System.Random
1230import qualified Data.Text as T
@@ -42,16 +60,23 @@ displayOpResult (DisplayParseErrorResult mPromptLength err) = do
4260 maybe (pure ()) (TIO.putStrLn . pointyString) mPromptLength
4361 TIO.putStr ("ERR:" <> errString)
4462
63+#if MIN_VERSION_megaparsec(6,0,0)
64+type Parser = Parsec Void Text
65+type ParseStr = Text
66+#else
67+type ParseStr = String
68+#endif
69+
4570spaceConsumer :: Parser ()
4671spaceConsumer = Lex.space (void spaceChar) (Lex.skipLineComment "--") (Lex.skipBlockComment "{-" "-}")
4772
4873opChar :: Parser Char
4974opChar = oneOf (":!#$%&*+./<=>?\\^|-~" :: String)-- remove "@" so it can be used as attribute marker without spaces
5075
51−reserved :: String -> Parser ()
76+reserved :: ParseStr -> Parser ()
5277reserved word = try (string word *> notFollowedBy opChar *> spaceConsumer)
5378
54−reservedOp :: String -> Parser ()
79+reservedOp :: ParseStr -> Parser ()
5580reservedOp op = try (spaceConsumer *> string op *> notFollowedBy opChar *> spaceConsumer)
5681
5782parens :: Parser a -> Parser a
@@ -67,8 +92,12 @@ identifier = do
6792 spaceConsumer
6893 pure (pack (istart:irest))
6994
70−symbol :: String -> Parser Text
95+symbol :: ParseStr -> Parser Text
96+#if MIN_VERSION_megaparsec(6,0,0)
97+symbol sym = Lex.symbol spaceConsumer sym
98+#else
7199symbol sym = pack <$> Lex.symbol spaceConsumer sym
100+#endif
72101
73102comma :: Parser Text
74103comma = symbol ","
@@ -94,7 +123,11 @@ whiteSpace = Token.whiteSpace lexer
94123-}
95124
96125integer :: Parser Integer
126+#if MIN_VERSION_megaparsec(6,0,0)
127+integer = Lex.decimal
128+#else
97129integer = Lex.integer
130+#endif
98131
99132float :: Parser Double
100133float = Lex.float
@@ -123,12 +156,18 @@ showRelationAttributes attrs = "{" <> T.concat (L.intersperse ", " $ L.map showA
123156
124157type PromptLength = Int
125158
159+#if MIN_VERSION_megaparsec(6,0,0)
160+type ParserError = ParseError Char Void
161+#else
162+type ParserError = ParseError Char Dec
163+#endif
164+
126165data TutorialDOperatorResult = QuitResult |
127166 DisplayResult StringType |
128167 DisplayIOResult (IO ()) |
129168 DisplayRelationResult Relation |
130169 DisplayErrorResult StringType |
131− DisplayParseErrorResult (Maybe PromptLength) (ParseError Char Dec) | -- Int refers to length of prompt text
170+ DisplayParseErrorResult (Maybe PromptLength) ParserError | -- PromptLength refers to length of prompt text
132171 QuietSuccessResult
133172 deriving (Generic)
134173
src/bin/TutorialD/Interpreter/DatabaseContextExpr.hs−2
@@ -1,6 +1,4 @@
11module TutorialD.Interpreter.DatabaseContextExpr where
2−import Text.Megaparsec
3−import Text.Megaparsec.Text
42import ProjectM36.Base
53import TutorialD.Interpreter.Base
64import qualified Data.Text as T
src/bin/TutorialD/Interpreter/DatabaseContextIOOperator.hs+1−4
@@ -1,11 +1,8 @@
11--compiling the script requires the IO monad because it must load modules from the filesystem, so we create the function and generate the requisite DatabaseExpr here.
22module TutorialD.Interpreter.DatabaseContextIOOperator where
33import ProjectM36.Base
4−
54import TutorialD.Interpreter.Base
65import TutorialD.Interpreter.Types
7−import Text.Megaparsec
8−import Text.Megaparsec.Text
96import Data.Text
107
118addAtomFunctionExprP :: Parser DatabaseContextIOExpr
@@ -14,7 +11,7 @@ addAtomFunctionExprP = dbioexprP "addatomfunction" AddAtomFunction
1411addDatabaseContextFunctionExprP :: Parser DatabaseContextIOExpr
1512addDatabaseContextFunctionExprP = dbioexprP "adddatabasecontextfunction" AddDatabaseContextFunction
1613
17−dbioexprP :: String -> (Text -> [TypeConstructor] -> Text -> DatabaseContextIOExpr) -> Parser DatabaseContextIOExpr
14+dbioexprP :: ParseStr -> (Text -> [TypeConstructor] -> Text -> DatabaseContextIOExpr) -> Parser DatabaseContextIOExpr
1815dbioexprP res adt = do
1916 reserved res
2017 funcName <- quotedString
src/bin/TutorialD/Interpreter/Export/CSV.hs+1−2
@@ -2,10 +2,9 @@ module TutorialD.Interpreter.Export.CSV where
22import ProjectM36.Relation.Show.CSV
33import TutorialD.Interpreter.Export.Base
44import TutorialD.Interpreter.RelationalExpr
5−import TutorialD.Interpreter.Base
5+import TutorialD.Interpreter.Base hiding (try)
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+4
@@ -1,10 +1,14 @@
1+{-# LANGUAGE CPP #-}
12--includes some hardcoded examples which can be imported even during safe evaluation (no file I/O)
23module TutorialD.Interpreter.Import.BasicExamples where
34import ProjectM36.DateExamples
45import ProjectM36.Base
56import ProjectM36.DatabaseContext
67import TutorialD.Interpreter.Base
8+
9+#if !MIN_VERSION_megaparsec(6,0,0)
710import Text.Megaparsec.Text
11+#endif
812
913data ImportBasicExampleOperator = ImportBasicDateExampleOperator
1014 deriving (Show)
src/bin/TutorialD/Interpreter/Import/CSV.hs+2−2
@@ -1,3 +1,4 @@
1+{-# LANGUAGE CPP #-}
12module TutorialD.Interpreter.Import.CSV where
23import TutorialD.Interpreter.Import.Base
34import ProjectM36.Base
@@ -5,8 +6,7 @@ import ProjectM36.Error
56import ProjectM36.Relation.Parse.CSV hiding (quotedString)
67import qualified Data.ByteString.Lazy as BS
78import qualified Data.Text as T
8−import Text.Megaparsec.Text
9−import TutorialD.Interpreter.Base
9+import TutorialD.Interpreter.Base hiding (try)
1010import Control.Exception
1111
1212importCSVRelation :: RelVarName -> TypeConstructorMapping -> Attributes -> FilePath -> IO (Either RelationalError DatabaseContextExpr)
src/bin/TutorialD/Interpreter/Import/TutorialD.hs+1−3
@@ -1,10 +1,8 @@
11module TutorialD.Interpreter.Import.TutorialD where
22import ProjectM36.Base
33import TutorialD.Interpreter.Import.Base
4−import TutorialD.Interpreter.Base
4+import TutorialD.Interpreter.Base hiding (try)
55import TutorialD.Interpreter.DatabaseContextExpr
6−import Text.Megaparsec.Text
7−import Text.Megaparsec hiding (try)
86import ProjectM36.Error
97import qualified ProjectM36.Error as PM36E
108import qualified Data.Text as T
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-- older versions of stack fail to
87#if !defined(VERSION_project_m36)
src/bin/TutorialD/Interpreter/RODatabaseContextOperator.hs−2
@@ -4,8 +4,6 @@ import ProjectM36.Base
44import ProjectM36.Error
55import ProjectM36.InclusionDependency
66import qualified ProjectM36.Client as C
7−import Text.Megaparsec
8−import Text.Megaparsec.Text
97import TutorialD.Interpreter.Base
108import TutorialD.Interpreter.RelationalExpr
119import TutorialD.Interpreter.DatabaseContextExpr
src/bin/TutorialD/Interpreter/RelationalExpr.hs−1
@@ -2,7 +2,6 @@ module TutorialD.Interpreter.RelationalExpr where
22import Text.Megaparsec
33import Text.Megaparsec.Expr
44import ProjectM36.Base
5−import Text.Megaparsec.Text
65import TutorialD.Interpreter.Base
76import TutorialD.Interpreter.Types
87import qualified Data.Text as T
src/bin/TutorialD/Interpreter/SchemaOperator.hs−2
@@ -1,7 +1,5 @@
11module TutorialD.Interpreter.SchemaOperator where
22import Text.Megaparsec
3−import Text.Megaparsec.Text
4−
53import ProjectM36.Base
64import ProjectM36.IsomorphicSchema
75import ProjectM36.Session
src/bin/TutorialD/Interpreter/TransGraphRelationalOperator.hs−3
@@ -8,9 +8,6 @@ import qualified ProjectM36.Client as C
88import TutorialD.Interpreter.Base
99import TutorialD.Interpreter.RelationalExpr
1010
11−import Text.Megaparsec
12−import Text.Megaparsec.Text
13−
1411import qualified Data.Text as T
1512
1613instance RelationalMarkerExpr TransactionIdLookup where
src/bin/TutorialD/Interpreter/TransactionGraphOperator.hs−2
@@ -1,8 +1,6 @@
11{-# LANGUAGE GADTs #-}
22module TutorialD.Interpreter.TransactionGraphOperator where
33import TutorialD.Interpreter.Base
4−import Text.Megaparsec.Text
5−import Text.Megaparsec
64import ProjectM36.TransactionGraph hiding (autoMergeToHead)
75import ProjectM36.Client
86import ProjectM36.Base
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
src/bin/benchmark/Handles.hs+1−2
@@ -4,9 +4,8 @@ import ProjectM36.Client
44import ProjectM36.Persist
55import Options.Applicative
66import TutorialD.Interpreter
7−import TutorialD.Interpreter.Base
7+import TutorialD.Interpreter.Base hiding (Parser, option)
88import qualified Data.Text as T
9−import Text.Megaparsec hiding (option)
109import Data.Monoid
1110import Control.Monad
1211