on master help sign in
properly parse UUIDs
78a1cdbAgentM
src/bin/TutorialD/Interpreter/Base.hs+11−2
@@ -5,7 +5,7 @@ import Text.Megaparsec.Text
5import qualified Text.Megaparsec.Lexer as Lex
5import qualified Text.Megaparsec.Lexer as Lex
6import ProjectM36.Base
6import ProjectM36.Base
7import ProjectM36.AtomType
7import ProjectM36.AtomType
8−import Data.Text
8+import Data.Text hiding (count)
9import qualified Data.Text as T
9import qualified Data.Text as T
10import qualified Data.List as L
10import qualified Data.List as L
11import qualified Data.Vector as V
11import qualified Data.Vector as V
@@ -127,7 +127,16 @@ quotedString = try tripleQuotedString <|> normalQuotedString
127
127
128uuidP :: Parser U.UUID
128uuidP :: Parser U.UUID
129uuidP = do
129uuidP = do
130+ uuidStart <- count 8 hexDigitChar
130− uuidStr <- count' 28 (28 + 4) (hexDigitChar <|> char '-') -- min 28 with no dashes, maximum 4 dashes
131+ _ <- char '-' -- min 28 with no dashes, maximum 4 dashes
132+ uuidMid1 <- count 4 hexDigitChar
133+ _ <- char '-'
134+ uuidMid2 <- count 4 hexDigitChar
135+ _ <- char '-'
136+ uuidMid3 <- count 4 hexDigitChar
137+ _ <- char '-'
138+ uuidEnd <- count 12 hexDigitChar
139+ let uuidStr = L.intercalate "-" [uuidStart, uuidMid1, uuidMid2, uuidMid3, uuidEnd]
131 case U.fromString uuidStr of
140 case U.fromString uuidStr of
132 Nothing -> fail "Invalid uuid string"
141 Nothing -> fail "Invalid uuid string"
133 Just uuid -> return uuid
142 Just uuid -> return uuid